GNU/Linux >> Linux の 問題 >  >> Linux

Bashで特定のタイムアウト後に子プロセスを強制終了する方法は?

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

または終了コードも取得するには:

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

(BASH FAQ エントリ #68:"コマンドを実行し、N 秒後に中止 (タイムアウト) するにはどうすればよいですか?")

何かをダウンロードしても構わない場合は、timeout を使用してください (sudo apt-get install timeout ) そしてそれを次のように使用します:(ほとんどのシステムには既にインストールされています。それ以外の場合は sudo apt-get install coreutils を使用します )

timeout 10 ping www.goooooogle.com

何かをダウンロードしたくない場合は、タイムアウトが内部的に行うことを行います:

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

より長い bash コードのタイムアウトを行いたい場合は、2 番目のオプションを次のように使用します。

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

Linux
  1. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  2. 親が終了した後に子プロセスを終了させる方法は?

  3. Linuxで親プロセスが強制終了された後、子プロセスがまだ生きているのはなぜですか?

  1. 特定の部分名を持つすべてのプロセスを強制終了する方法は?

  2. Linux でプロセスを一時停止/再開する方法

  3. Bash でコマンドのグループをタイムアウトする方法

  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linuxでゾンビプロセスを見つけて殺す方法

  3. bashでプロセスを強制終了せずにタイムアウト