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 yadsebagai subproses /bin/bash, jika saya menutupnya yadberubah menjadi sleep 60dalam 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 9411muncul 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 bashsubkulit 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 yadmencegah grepproses itu sendiri muncul di daftar hasil.
Jika terminal Anda masih terbuka
bashmenyediakan 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 jobsbuiltin, 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 10pekerjaan yang ditangguhkan :
kill %2 # or
kill %+ # or
kill %
topuntuk membunuh proses dengan menekank, lalu memasukkan PID, lalu menekan enter dua kali.