Jak w środowisku Linux mogę wysłać sygnał zabicia do procesu, upewniając się, że kod wyjścia zwrócony z tego procesu wynosi 0? Czy musiałbym wykonać w tym celu jakąś fantazyjną magię GDB, czy może jest jakiś fantazyjny sygnał zabicia, którego nie jestem świadomy?
Przypadek testowy:
cat; echo $?
killall cat
Próbowanie różnych sygnałów zabicia oferuje tylko różne sygnały powrotu, takie jak 129, 137 i 143. Moim celem jest zabicie procesu uruchamianego przez skrypt, ale sprawienie, by skrypt uznał, że się powiódł.
No symbol table is loaded. Use the "file" command
. Chociaż jest to bardzo mało prawdopodobne._exit
systemowe0
jako argument. Będzie to działać na każdym procesie, który nie jest po prostu zapętleniem i spaleniem cykli procesora. Jeśli proces nie utknie w nieskończonej pętli, nadal możesz zastosować to samo podejście, jeśli możesz znaleźć niezbędne instrukcje gdzieś w jego pliku wykonywalnym i wskazać tam wskaźnik instrukcji.Nie. Gdy powłoka zostanie złapana
SIGCHLD
, bezwarunkowo ustawia wartość zwracaną odpowiednio na wartość niezerową, więc wymagałoby to modyfikacji skryptu lub powłoki.źródło
Nie jestem pewien, ale to zakończy się z 0, jeśli którykolwiek z wymienionych sygnałów zostanie odebrany. Możesz wykonywać inne czynności, w tym wywoływać funkcję itp.
źródło
Ten liner działał dla mnie:
źródło
$ cat; echo $?
Terminated
143
.Trochę hacky sposób, ale ...
Możesz utworzyć opakowanie dla swojego procesu, zastępując moduł obsługi SIGCHLD. Na przykład:
Następnie możesz ustawić skrypt uruchamiający to opakowanie zamiast procesu, umieszczając go wcześniej w $ PATH i zmieniając jego nazwę na tę samą nazwę.
źródło