GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man einen untergeordneten Prozess nach einem bestimmten Timeout in Bash beenden?

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

oder um auch die Exit-Codes zu erhalten:

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

(Gesehen in:BASH FAQ Eintrag Nr. 68:"Wie führe ich einen Befehl aus und lasse ihn nach N Sekunden abbrechen (Zeitüberschreitung)?")

Wenn es Ihnen nichts ausmacht, etwas herunterzuladen, verwenden Sie timeout (sudo apt-get install timeout ) und verwenden Sie es wie folgt:(Die meisten Systeme haben es bereits installiert, ansonsten verwenden Sie sudo apt-get install coreutils )

timeout 10 ping www.goooooogle.com

Wenn Sie etwas nicht herunterladen möchten, tun Sie, was timeout intern tut:

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

Falls Sie ein Timeout für längeren Bash-Code durchführen möchten, verwenden Sie die zweite Option als solche:

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

Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. So finden und töten Sie den Zombie-Prozess in Linux

  3. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  4. Wie kann man alle Prozesse mit einem bestimmten Teilnamen beenden?

  5. So beenden Sie den Zombie-Prozess

Wie beendet man einen Prozess in Linux? Befehle zum Beenden

So beenden Sie einen Prozess in Linux

So beenden Sie Zombie-Prozesse in Linux

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Wie man einen Prozess unter Linux beendet

So töten Sie Zombie-Prozesse in Ubuntu