我有一个我想要开始的课程。让'说这个程序将运行一段时间(真) - 循环(所以它不会终止。我想写一个bash脚本:
./endlessloop &
)sleep 1
)我不能用$!从child获取pid,因为服务器同时运行了很多实例。
答案 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)