Linux: tutup program dengan baris perintah (jangan bunuh itu)

21

Beberapa aplikasi hanya mengizinkan satu instance yang berjalan (seperti gerhana, jika Anda ingin menggunakan ruang kerja yang sama). Jadi jika saya masuk dari lokasi lain, saya harus mematikan / menutup aplikasi yang terbuka ketika saya sebelumnya masuk dari lokasi lain.

Saya selalu menggunakan perintah kill untuk mematikan proses yang sedang berjalan. Tetapi, jika Anda mematikan suatu proses, itu mungkin tidak menyimpan beberapa negara yang berguna untuk penggunaan masa depan. Namun, jika Anda "menutup" dengan benar dengan mengklik tombol tutup, misalnya, itu akan menyimpan negara dengan benar.

Apakah ada cara untuk "menutup" aplikasi dengan benar dari baris perintah? Saya tahu ini dapat bervariasi dari aplikasi, jadi mari kita menjadi sedikit lebih umum: bagaimana cara mengirim sinyal ke aplikasi lain yang sedang berjalan, dan sinyal ini berfungsi seperti jika kita mengklik tombol "tutup" di bar bagian atas?

Vendetta
sumber
2
Haruskah kita berasumsi bahwa mengakses desktop dari jarak jauh dengan VNC dan kemudian mengklik tutup grafis adalah terlalu banyak biaya tambahan.
Brian Swift

Jawaban:

33

Secara default, perintah kill akan mengirim SIGTERM(sinyal terminasi) ke proses yang sedang berjalan. Tidak seperti SIGKILL, yang akan mematikan proses secara paksa tanpa ada kesempatan untuk merespons, SIGTERMsinyal dapat dicegat oleh proses, memungkinkannya untuk berakhir dengan anggun. Apakah itu benar - benar berakhir dengan anggun atau tidak sepenuhnya tergantung pada proses itu sendiri; itu bisa dengan mudah membunuh dirinya sendiri atau mengabaikan sinyal sama sekali.

Anda dapat memastikan bahwa Anda mengirim SIGTERMalih-alih sinyal lain dengan membuatnya eksplisit di baris perintah sebagai berikut:

kill -s TERM <pid>
goldpseudo
sumber
1
Ya, premis OP itu salah. The killperintah mencoba shutdown anggun. Jika aplikasi tidak ditutup dengan bersih dalam kasus itu, itu rusak. (Dan sebagian besar aplikasi tidak rusak.)
David Schwartz
2
Firefox sepertinya (rusak). Jika saya menjalankan kill -s TERM <firefox-pid>, itu tidak akan ditutup dengan anggun, dan ketika saya memulainya lagi, ia bertanya apakah saya ingin memulihkan sesi macet. : sigh:
Wilson F
6

Perhatikan bahwa ketika menggunakan pkilldaripada killuntuk menentukan JANGKA sintaksnya adalah:

pkill -TERM <process-name>

pkill sama seperti membunuh, tetapi Anda dapat menggunakan nama proses daripada id. man pkill

Connor McCormick
sumber