Bagaimana cara saya mematikan tugas latar belakang yang terakhir muncul di linux?
Contoh:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Bagaimana cara saya mematikan tugas latar belakang yang terakhir muncul di linux?
Contoh:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Jawaban:
Ada variabel khusus untuk ini di bash:
kill $!
$! memperluas ke PID dari proses terakhir yang dijalankan di latar belakang.
^Z
bukan latar belakang pekerjaan, itu menghentikan mereka. Berikutnya bg
melakukan 'latar belakang' yang sebenarnya (melanjutkan eksekusi di latar belakang), dan setelah itu $!
berfungsi seperti yang diharapkan.
????
singkatan dari satu atau lebih perintah yang akan dieksekusi setelah kill, jika salah satu dari perintah itu bergantung pada pekerjaan yang dilakukan oleh proses latar belakang, berhati-hatilah dengan tugas pembersihan atau penyelesaian yang proses latar belakang mungkin lakukan dalam penangan sinyal setelah menerima sinyal (trappable). Terbaik untuk menambahkan wait
(diikuti mungkin dengan sync
atau bahkan a sleep <n>
) tepat sebelum yang pertama dari perintah 'tergantung' tersebut.
Anda dapat membunuh berdasarkan nomor pekerjaan. Saat Anda meletakkan tugas di latar belakang Anda akan melihat sesuatu seperti:
$ ./script &
[1] 35341
Itu [1]
adalah nomor pekerjaan dan dapat dirujuk seperti:
$ kill %1
$ kill %% # Most recent background job
Untuk melihat daftar nomor pekerjaan gunakan jobs
perintah. Lebih banyak dari man bash
:
Ada beberapa cara untuk merujuk ke suatu pekerjaan di shell. Karakter
%
memperkenalkan nama pekerjaan. Nomor pekerjaann
dapat disebut sebagai%n
. Pekerjaan juga dapat disebut menggunakan awalan nama yang digunakan untuk memulainya, atau menggunakan substring yang muncul di baris perintahnya. Misalnya,%ce
merujuk padace
pekerjaan yang berhenti . Jika awalan cocok dengan lebih dari satu pekerjaan, bash melaporkan kesalahan. Menggunakan%?ce
, di sisi lain, mengacu pada pekerjaan apa pun yang mengandung stringce
di baris perintahnya. Jika substring cocok dengan lebih dari satu pekerjaan, bash melaporkan kesalahan. Simbol%%
dan%+
lihat gagasan shell tentang pekerjaan saat ini, yang merupakan pekerjaan terakhir dihentikan saat berada di latar depan atau dimulai di latar belakang. Pekerjaan sebelumnya dapat dirujuk menggunakan%-
. Dalam output yang berkaitan dengan pekerjaan (misalnya, output dari perintah pekerjaan), pekerjaan saat ini selalu ditandai dengan a+
, dan pekerjaan sebelumnya dengan a-
. Satu%
(tanpa spesifikasi pekerjaan yang menyertai) juga mengacu pada pekerjaan saat ini.
set -m
), ini dimaksudkan untuk penggunaan interaktif. Lihat stackoverflow.com/questions/690266/… juga
%1
dan %%
- terutama. Beberapa hal tidak mati pada Ctrl-C, jadi Anda perlu Ctrl-Z, lalu kill -9 %%
. Salah satu contoh di mana saya merasa berguna adalah: while true; do mplayer <some unstable online radio>; date >> restarts.log; done
- Ctrl-C hanya akan membawa Anda ke iterasi loop berikutnya. Sebelum saya harus melakukan ps
atau mungkin jobs -l
, dan kemudian ketik ulang PID, yang membosankan.
while true
dengan while sleep 1
. Ini akan memberi Anda penundaan singkat sebelum memulai kembali jika Anda dapat hidup dengan itu, dan jika Anda menekan ctrl-c dua kali, yang kedua akan mengganggu tidur, mengakhirinya dengan jalan keluar nol dan keluar dari loop.
Ini harus mematikan semua proses latar belakang:
jobs -p | xargs kill -9
kill -9 %%
kurang mengetik :)
ini adalah jawaban diluar topik, tetapi, bagi mereka yang tertarik, ini mungkin berharga.
Seperti pada jawaban @John Kugelman,% terkait dengan spesifikasi pekerjaan. bagaimana cara efisien menemukan itu? gunakan perintah less's & pattern , sepertinya man menggunakan less pager (tidak yakin), di man bash ketik &% lalu ketik Enter hanya akan menampilkan baris yang berisi '%', untuk mengatur ulang semua, ketik &. lalu Masuk.
Cukup gunakan perintah killall:
bunuh semua taskname
untuk info lebih lanjut dan opsi lebih lanjut, ketik "man killall".
killall python
atau killall java
, sambil menjalankan sesuatu yang berguna di sistem.