我有一个要启动的程序。假设这个程序将运行一个 while(true)-loop(所以它不会终止。我想写一个 bash 脚本:
- 启动程序(
./endlessloop &
) - 等待 1 秒(
休眠 1
) - 杀死程序 --> 如何?
我不能使用 $!从 child 那里获取 pid,因为服务器同时运行了很多实例。
最佳答案
存储 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 秒后中止(超时)?"
ProcessManagement Wooledge wiki 上的页面也讨论了相关的最佳实践。
关于Bash:启动并终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645713/