Отправка сигналов обычно работает с использованием kill
.Чтобы иметь возможность убить, обычно требуется идентификатор процесса, PID, процесса, о котором вы хотите сообщить.
popen
этого не дает.Однако есть несколько альтернатив:
Вы можете использовать PID 0
, который будет отправлять ваш сигнал каждому процессу в группе процессов.Если у вас есть только один родительский процесс, порождающий один дочерний процесс с использованием popen
, то использование kill(0, your_signal)
может быть одним из способов.
Другой способ - это заставить дочерний процесс передавать свой PID обратнородительский процесс, например, просто выводя это в одну строку как первое после запуска.
В Perl это будет выглядеть как
print $$, "\n";
процесс, который сделалpopen
может затем прочитать эту строку из полученного дескриптора файла и извлечь из нее полезный pid, используя strtol
или atoi
, и сохранить его для использования с kill
позже, после прочтения фактического выводаего дочерний процесс.
Если по какой-либо причине ни один из этих подходов не подходит для вашей проблемы, вы, вероятно, хотите прекратить использовать popen
в целом и делать большую часть того, что он делает вручную, что наиболее важно fork
ing, так как именно это даст вам PID для использования для последующей отправки сигналов.