ionice en el proceso principal no parece funcionar, así que modifiqué el script de inicio de "courier -imap" y "courier -imap -ssl" y parece que funciona:
case "$1" in
start)
if [ "$START" = "yes" ]; then
log_daemon_msg "Starting $PROGRAM" "$DAEMON"
umask $IMAP_UMASK
ulimit -v $IMAP_ULIMITD
/usr/bin/env - /bin/sh -c " set -a; \
bindir=${bindir}; \
. ${sysconfdir}/imapd; \
if [ "$SSLCONFIG" ]; then. ${sysconfdir}/imapd-ssl; fi; \
IMAP_STARTTLS=$IMAPDSTARTTLS ; export IMAP_STARTTLS ; \
PROXY_HOSTNAME=$PROXY_HOSTNAME;
TLS_PROTOCOL=$TLS_STARTTLS_PROTOCOL ; \
ionice -c3 /usr/sbin/courierlogger -pid=$PIDFILE -start $LOGGEROPTS \
$TCPD -address=$ADDRESS \
-maxprocs=$MAXDAEMONS -maxperip=$MAXPERIP \
$TCPDOPTS \
$PORT ${libexecdir}/courier/imaplogin \
${bindir}/imapd $MAILDIRPATH"
log_end_msg 0
fi
Si alguien tiene sugerencias de mejora, por favor dígame.
Рекомендуемый способ таков:
Пример вашей программы модификацииyours.c
(ничего не делает):
#include <stdio.h>
int main (int argc, char argv[])
{
char buf[1024];
int n;
do {
n = fread(buf, sizeof(char), sizeof(buf), stdin);
fwrite (buf, sizeof(char), n, stdout);
} while (n > 0);
}
Настройка исходной программы:
mknod first.pipe
original_program first.pipe
Теперь запустите во втором терминале (или в фоновом режиме)
yours < first.pipe | other_programs
Или, если вы хотите использовать именованный канал
mknod second.pipe
yours < first.pipe > second.pipe
other_prgrams < second.pipe
Повторяю :В большинстве случаев вам на самом деле не нужен именованный канал (fifo ), использование |
в оболочке работает просто отлично. Вам также не нужно жестко кодировать конкретный канал в свои собственные программы, просто используйте перенаправление.