В жемчуге, уничтожая ребенка и его детей, когда ребенок был создан с помощью открытого

Просто выполните стандартного демона NTP.

Это действительно имеет опции взять вход от нескольких устройств GPS, а также говорящий с сетевыми серверами.

Редактирование: Я обращался к http://www.ntp.org/ , не тот, который идет с Windows.

у меня нет предложения относительно того, какие клиенты NTP являются лучшими для окон, но для машин Unix нет никакой настоящей причины для не выполнения NTP.

6
задан richard 4 November 2009 в 18:29
поделиться

3 ответа

Вы можете сделать это с группами процессов, если ваша операционная система их поддерживает. Вам необходимо сделать процесс сценария лидером группы процессов. Дочерние процессы, которые он запускает, унаследуют группу процессов от своего родителя. Затем вы можете использовать kill для одновременной отправки сигнала каждому процессу в группе.

В launch () вам нужно будет заменить строку open на одну что вилки. Затем в дочернем элементе вы должны вызвать setpgrp () перед выполнением команды. Что-то вроде следующего должно работать:

my $pid = open(PIPE, "-|");
if (0 == $pid) {
    setpgrp(0, 0);
    exec $script;
    die "exec failed: $!\n";
}
else {
    while(<PIPE>) {
        # do stuff with output
    }
    close(PIPE) or die $!;
}

Позже, чтобы убить процесс скрипта и его дочерние элементы, отмените идентификатор процесса, о котором вы сигнализируете:

kill 9, -$pid;
12
ответ дан 8 December 2019 в 14:44
поделиться

В общем, я не думаю, что вы можете ожидать, что сигналы будут распространяться на все дочерние процессы; это не относится к perl.

Тем не менее, вы могли бы использовать функцию сигнала процесса group , встроенную в perl kill () :

... если SIGNAL отрицательный, он убивает группы процессов, а не процессы ...

Вам, вероятно, потребуется использовать setpgrp () в вашем (прямом) дочернем процессе, а затем изменить ваш вызов kill на что-то вроде:

kill -9, $pgrp;
2
ответ дан 8 December 2019 в 14:44
поделиться

Попробуйте добавить:

use POSIX qw(setsid);
setsid;

вверху вашей функции launch_and_monitor .

2
ответ дан 8 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: