GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan Ctrl+C untuk mematikan semua proses latar belakang yang dimulai dalam skrip Bash?

Pembaruan:trap membutuhkan penghapusan SIG awalan dengan syarat, meskipun beberapa shell mendukung untuk memasukkannya. Lihat komentar di bawah.

Ampersand "&" menjalankan perintah di latar belakang dalam proses baru. Ketika proses induknya (perintah yang menjalankan skrip bash dalam kasus Anda) berakhir, proses latar belakang ini akan mengatur ulang proses induknya ke init (proses dengan PID 1), tetapi tidak akan mati. Saat Anda menekan ctrl+c , Anda mengirimkan sinyal interupsi ke proses latar depan, dan itu tidak akan memengaruhi proses latar belakang.

Untuk mematikan proses latar belakang, Anda harus menggunakan kill perintah dengan PID proses latar belakang terbaru, yang dapat diperoleh dengan $! .

Jika Anda ingin menggunakan ctrl+c untuk menghentikan proses skrip dan latar belakang, Anda dapat melakukan ini:

trap 'kill $BGPID; exit' INT
sleep 1024 &    # background command
BGPID=$!
sleep 1024      # foreground command of the script

trap memodifikasi penangan jebakan dari SIGINT (trap mengharuskan menghapus SIG awalan tetapi beberapa shell mungkin mendukung untuk memasukkannya) sehingga skrip akan mematikan proses dengan $BGPID sebelum keluar.


Linux
  1. Cara Menggunakan Kata Sandi Terenkripsi di Linux Bash Shell Script

  2. Cara Menggunakan if else Conditionals Statement di Bash Script

  3. Apa Proses Zombie Dan Bagaimana Menemukan &Membunuh Proses Zombie?

  1. Bagaimana Memantau Atau Membunuh Proses Yang Telah Dimulai Oleh Cron?

  2. Bagaimana cara membunuh proses anak setelah batas waktu tertentu di Bash?

  3. bash:diam-diam membunuh proses fungsi latar belakang

  1. Bagaimana cara mematikan semua proses dengan nama parsial yang diberikan?

  2. Bagaimana cara mematikan semua proses latar belakang di zsh?

  3. bagaimana cara menggunakan kill SIGUSR2 di bash?