Это не будет работать для процессов, которые отсоединились, но вы можете пройтись по дереву дочерних процессов, используя proc_listchildpids()
, и отправлять сигналы на каждый полученный вами PID. Вероятно, есть некоторые крайние моменты времени между проверкой дочерних процессов и их уничтожением - это может породить больше процессов в это время. Возможно, вы могли бы приостановить все процессы, прежде чем перечислять их детей и убивать их. Процессы, чьи родители умерли, должны, я думаю, в любом случае быть присоединены к их дедушке (хотя я могу ошибаться), поэтому в этом случае, если вы продолжаете звонить proc_listchildpids()
после отправки каждого раунда сигналов, вы должны в конечном итоге оказаться в устойчивое состояние. (В идеале без дочерних процессов. Но если они попадают в действительно плохое состояние [из-за ошибки в ядре], некоторые процессы могут быть полностью неубиваемыми.)
proc_listchildpids()
объявлено в <libproc/libproc.h>
.