Di lingkungan Linux, bagaimana saya bisa mengirim sinyal kill ke suatu proses, sambil memastikan bahwa kode keluar kembali dari proses itu adalah 0? Apakah saya harus melakukan sihir GDB mewah untuk ini, atau ada sinyal membunuh mewah yang tidak saya sadari?
Kasus cobaan:
cat; echo $?
killall cat
Mencoba berbagai sinyal kill hanya menawarkan sinyal return yang berbeda, seperti 129, 137, dan 143. Tujuan saya adalah untuk mematikan proses yang dijalankan skrip, tetapi membuat skrip berpikir itu berhasil.
No symbol table is loaded. Use the "file" command
. Meskipun ini sangat tidak mungkin._exit
sistem dengan0
argumen. Itu akan bekerja pada proses apa pun yang tidak hanya mengulang dan membakar siklus CPU. Jika proses tersebut tidak terjebak dalam infinite loop, Anda masih dapat menggunakan pendekatan yang sama jika Anda dapat menemukan instruksi yang diperlukan di suatu tempat di executable dan arahkan pointer instruksi ke sana.Tidak. Ketika shell menangkapnya
SIGCHLD
tanpa syarat menetapkan nilai kembali tepat ke nilai non-nol, jadi ini akan memerlukan modifikasi skrip atau shell.sumber
Saya tidak yakin tetapi ini akan keluar dengan 0 jika ada sinyal yang terdaftar diterima. Anda dapat melakukan tindakan lain termasuk memanggil fungsi, dll.
sumber
Satu kalimat ini bekerja untuk saya:
sumber
$ cat; echo $?
Terminated
143
.Cara agak hacky, tapi ..
Anda dapat membuat pembungkus untuk proses Anda, menimpa SIGCHLD Handler. Sebagai contoh:
Setelah itu Anda dapat membuat skrip Anda menjalankan pembungkus ini alih-alih proses Anda dengan meletakkannya lebih awal dalam $ PATH dan mengganti nama dengan nama yang sama.
sumber