GNU/Linux >> Belajar Linux >  >> Linux

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

# Spawn a child process:
(dosmth) & pid=$!
# in the background, sleep for 10 secs then kill that process
(sleep 10 && kill -9 $pid) &

atau untuk mendapatkan kode keluar juga:

# Spawn a child process:
(dosmth) & pid=$!
# in the background, sleep for 10 secs then kill that process
(sleep 10 && kill -9 $pid) & waiter=$!
# wait on our worker process and return the exitcode
exitcode=$(wait $pid && echo $?)
# kill the waiter subshell, if it still runs
kill -9 $waiter 2>/dev/null
# 0 if we killed the waiter, cause that means the process finished before the waiter
finished_gracefully=$?

(Seperti yang terlihat di:Entri FAQ BASH #68:"Bagaimana cara menjalankan perintah, dan membatalkannya (timeout) setelah N detik?")

Jika Anda tidak keberatan mengunduh sesuatu, gunakan timeout (sudo apt-get install timeout ) dan gunakan seperti:(sebagian besar Sistem sudah menginstalnya jika tidak, gunakan sudo apt-get install coreutils )

timeout 10 ping www.goooooogle.com

Jika Anda tidak ingin mengunduh sesuatu, lakukan waktu tunggu secara internal:

( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec ping www.goooooogle.com )

Jika Anda ingin melakukan timeout untuk kode bash yang lebih lama, gunakan opsi kedua seperti:

( cmdpid=$BASHPID; 
    (sleep 10; kill $cmdpid) \
   & while ! ping -w 1 www.goooooogle.com 
     do 
         echo crap; 
     done )

Linux
  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  3. Mengapa proses anak masih hidup setelah proses induk dimatikan di Linux?

  1. Cara mematikan proses zombie di Linux

  2. Bagaimana cara membuat proses anak mati setelah orang tua keluar?

  3. Cara mengatur waktu sekelompok perintah di Bash

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

  2. Cara membunuh proses zombie

  3. bagaimana cara menggunakan kill SIGUSR2 di bash?