Bash:启动并杀死子进程

时间:2016-09-22 17:49:48

标签: bash process sleep

我有一个我想要开始的课程。让'说这个程序将运行一段时间(真) - 循环(所以它不会终止。我想写一个bash脚本:

  1. 启动程序(./endlessloop &
  2. 等待1秒(sleep 1
  3. 杀死该计划 - >怎么样?
  4. 我不能用$!从child获取pid,因为服务器同时运行了很多实例。

2 个答案:

答案 0 :(得分:4)

存储PID:

./endlessloop & endlessloop_pid=$!
sleep 1
kill "$endlessloop_pid"

您还可以使用kill -0检查流程是否仍在运行:

if kill -0 "$endlessloop_pid"; then
  echo "Endlessloop is still running"
fi

...并将内容存储在变量中意味着它可以扩展到多个进程:

endlessloop_pids=( )                       # initialize an empty array to store PIDs
./endlessloop & endlessloop_pids+=( "$!" ) # start one in background and store its PID
./endlessloop & endlessloop_pids+=( "$!" ) # start another and store its PID also
kill "${endlessloop_pids[@]}"              # kill both endlessloop instances started above

另请参阅BashFAQ #68,"如何运行命令,并在N秒后中止(超时)?"

Wooledge wiki上的ProcessManagement页面还讨论了相关的最佳实践。

答案 1 :(得分:0)

您可以使用pgrep命令:

kill $(pgrep endlessloop)