# 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 )