Обращаться с WIFSIGNALED легко. Дочерний процесс может совершить самоубийство с помощью системного вызова kill()
. Вы также можете проверить наличие дампов ядра - некоторые сигналы их создают (SIGQUIT, IIRC); некоторые сигналы не (SIGINT).
Обработка WIFSTOPPED может быть сложнее. Самый простой шаг для того, чтобы ребенок снова отправил SIGSTOP с системным вызовом kill()
. На самом деле, я думаю, что это должно работать. Обратите внимание, что вы можете проверить SIGTTIN и SIGTTOU и SIGTSTOP - я считаю, что они рассчитывают на WIFSTOPPED. (Существует также вероятность того, что SIGSTOP работает только в разумных пределах при отправке отладчиком в процесс, который он выполняет через системный вызов не POSIX, ptrace()
.)
Обработка WIFCONTINUED - это то, что, я думаю, должен сделать родитель; после того, как вы обнаружите, что процесс был остановлен, ваш код вызова должен заставить его продолжить, отправив ему сигнал SIGCONT (снова kill()
). Ребенок не может доставить это сам; это было остановлено. Опять же, я не уверен, есть ли дополнительные морщины, чтобы беспокоиться - вероятно.