В среде Linux, как я могу отправить сигнал уничтожения процессу, убедившись, что код выхода, возвращаемый этим процессом, равен 0? Должен ли я сделать для этого какую-нибудь причудливую магию GDB, или есть какой-нибудь причудливый сигнал убийства, о котором я не знаю?
Прецедент:
cat; echo $?
killall cat
Попытка различных сигналов уничтожения дает только разные обратные сигналы, такие как 129, 137 и 143. Моя цель - убить процесс, который запускается сценарием, но заставить сценарий думать, что он был успешным.
No symbol table is loaded. Use the "file" command
. Хотя это маловероятно._exit
системный вызов в0
качестве аргумента. Это будет работать с любым процессом, который не просто зацикливает и записывает циклы процессора. Если процесс не застрял в бесконечном цикле, вы все равно можете использовать тот же подход, если вы можете найти необходимые инструкции где-нибудь в его исполняемом файле и указать указатель инструкции там.Нет. Когда оболочка перехватывает,
SIGCHLD
она безоговорочно устанавливает возвращаемое значение ненулевым значением, так что это потребует модификации либо скрипта, либо оболочки.источник
Я не уверен, но это завершится с 0, если какой-либо из перечисленных сигналов будет получен. Вы можете выполнять другие действия, включая вызов функции и т. Д.
источник
Этот однострочник работал для меня:
источник
$ cat; echo $?
Terminated
143
.Немного хакерский путь, но ..
Вы можете создать оболочку для вашего процесса, переопределяя SIGCHLD Handler. Например:
После этого вы можете заставить свой скрипт запускать эту оболочку вместо процесса, поместив его ранее в $ PATH и переименовав в то же имя.
источник