Beberapa program reguler saya mogok (secara teratur) dengan pesan "Sinyal yang ditentukan pengguna 1". Saya tahu ada nohup
perintah, tetapi apakah ada nousr1
perintah? Atau sesuatu yang akan melakukan sesuatu seperti nohup
tetapi dengan USR1?
12
Jawaban:
Solusi hacky sederhana untuk memiliki utilitas analog
nohup
, tetapi untukSIGUSR1
, akan mendapatkan salinan sumber core , membongkar, lakukan, secara opsional juga mengubah nama file output
, kompilasi sumber ini dan instal
nohup
biner yang baru dikompilasi untuk/usr/bin/nousr1
:Setelah ini, ketika saya memeriksa,
sleep 1000
keluarUSR1
, sementaranousr1 sleep 1000
kebal terhadap sinyal ini.sumber
nohup
, by the way, adalah untuk memisahkan proses dari terminal sehingga tidak dikirimSIGHUP
sejak awal. Bahwa itu juga mengatur penangan sinyal adalah bonus tambahan, tetapi seharusnya tidak perlu.signal(SIGHUP,SIG_IGN);
panggilannohup.c
, proses akan menerimaSIGHUP
. Apanohup
selain mengabaikan sinyal hanya membuka kembali stdin, stdout, stderr deskriptor sebagai file non-terminal. Itu tidak benar-benar memisahkan proses dari terminal dengan cara khusus apa pun. Yaitu, proses akan dikirimSIGHUP
ketika terminal ditutup. Di sisi lain ada bash, yang melakukan hal yang sama dengandisown
perintah, tapi aku tidak yakin bagaimana itu dilaksanakan - mungkin dengan cara yang Anda maksud.Bagaimana dengan perintah
trap
built-in shell ?sumber
Anda perlu menggunakan bentuk
trap
perintah dengan argumen kosong. Coba ini:Ini akan mengabaikan sinyal SIGUSR1 yang sedang Anda coba lakukan. Meskipun saya setuju dengan para komentator bahwa mungkin ada lebih banyak yang terjadi di sini daripada yang terlihat.
Bentuk yang salah:
masih akan mengizinkan
myprogram
untuk menerima SIGUSR1 tetapi shell kemudian akan mengeksekusiecho
daritrap
perintah.sumber
trap '' SIGUSR1; gvimdiff file1 file2
dan Vim meninggal dengan "Vim: Tertangkap sinyal mematikan USR1".