GNU/Linux >> Znalost Linux >  >> Linux

Jak zabít podřízený proces po daném časovém limitu v Bash?

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

nebo získat také výstupní kódy:

# 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=$?

(Jak je vidět v:BASH FAQ #68:„Jak spustím příkaz a nechám jej přerušit (časový limit) po N sekundách?“)

Pokud vám nevadí něco stáhnout, použijte timeout (sudo apt-get install timeout ) a použijte jej jako:(většina systémů jej již má nainstalovaný, jinak použijte sudo apt-get install coreutils )

timeout 10 ping www.goooooogle.com

Pokud nechcete něco stahovat, udělejte to, co timeout dělá interně:

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

V případě, že chcete udělat timeout pro delší bash kód, použijte druhou možnost jako takovou:

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

Linux
  1. Jak zabít proces zombie na Linuxu

  2. Jak zabít proces v Linuxu pomocí příkazu?

  3. Jak pozastavit/obnovit proces v Linuxu

  1. Jak nechat podřízený proces zemřít po odchodu rodiče?

  2. Proč podřízený proces stále žije poté, co byl nadřazený proces v Linuxu zabit?

  3. Jak zabít všechny procesy s daným částečným názvem?

  1. Jak zabít zombie proces

  2. jak použít kill SIGUSR2 v bash?

  3. Jak časový limit skupiny příkazů v Bash