Saya mulai
while true; do yad; sleep 60; done &
dan menutup terminal untuk mengujinya, sekarang saya mendapat masalah yang sama.
Jika Anda sudah menutup terminal, Anda sudah memulai loop
Mari kita lihat ikhtisar proses yang sedang berjalan ps fjx
, baris terakhir di mesin saya baca
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
Anda dapat melihat yad
sebagai subproses /bin/bash
, jika saya menutupnya yad
berubah menjadi sleep 60
dalam output dari ps
. Jika tampilan hierarki terlalu membingungkan, Anda juga dapat mencari hasilnya sebagai berikut 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Baris output dimulai dengan dua angka, yang pertama adalah PPID, ID proses dari proses induk dan yang kedua adalah PID, ID dari proses itu sendiri. Itu karena yang 9411
muncul di kedua baris di sini:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Itu adalah bash
subkulit yang ingin kita bunuh dan kita baru saja mengetahui PID-nya, jadi sekarang semua yang tersisa adalah sederhana
kill 9411 # replace 9411 with the PID you found out!
dan kulit yang menjengkelkan hilang untuk selamanya.
1 : Notasi sebagai grep "[y]ad"
gantinya hanya grep yad
mencegah grep
proses itu sendiri muncul di daftar hasil.
Jika terminal Anda masih terbuka
bash
menyediakan variabel $!
, yang "meluas ke ID proses pekerjaan yang paling baru ditempatkan di latar belakang", jadi yang berikut hanya membunuh proses terbaru di latar belakang:
kill $!
Jika ini bukan proses terbaru, cukup dapatkan daftar menjalankan pekerjaan dengan jobs
builtin, contoh output:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Ada dua pekerjaan dalam daftar pekerjaan, untuk membunuh salah satu dari mereka Anda dapat mengaksesnya dengan nomor pekerjaan atau pintasan %
, %+
("pekerjaan saat ini") dan %-
("pekerjaan sebelumnya"), misalnya untuk mematikan loop yang berjalan di latar belakang Anda bisa melakukan
kill %1 # or
kill %-
dan untuk membunuh sleep 10
pekerjaan yang ditangguhkan :
kill %2 # or
kill %+ # or
kill %
top
untuk membunuh proses dengan menekank
, lalu memasukkan PID, lalu menekan enter dua kali.Ini
&
akan membuat terminal membuat proses baru dan menjalankan kode Anda di dalamnya. Jadi kode Anda menjadi independen dari proses terminal. Bahkan jika Anda menutup terminal, proses baru di mana kode Anda berjalan tidak akan berhenti. Jadi hapus&
atau lakukanps -aux
, cari proses Anda dan bunuhkill (process id)
.sumber
Biasanya bg untuk latar belakang fg untuk latar depan. Jika Anda menggunakan & simbol gunakan fg itu akan menampilkan program yang sedang berjalan. Tekan Ctrl + C untuk membunuh.
sumber
bg
/fg
tidak akan berfungsi setelah terminal terlepasbash
. Tidak dapat memasang kembali menggunakanreptyr
karenabash
memiliki proses anak (sleep
).