我在编写 bash 脚本时遇到了困难,希望有人能提供帮助。基本上我试图同时运行多个进程,然后在一段时间后将它们全部杀死。
例如,如果我想跑my_long_running_task
50 次并在 10 分钟后杀死,这就是我想出的:
#!/bin/bash
PIDS=()
(while :
do
my_long_running_task;
sleep 1
done ) &
PIDS+=($!)
...{repeat while loop 50 times or stick it in a for loop)...
sleep 600; # 10 minutes * 60 seconds
for p in "${PIDS[@]}"
do
kill $p
done
我不是 bash 专家,但这似乎应该可行 - 将所有进程分叉,将它们的 pid 添加到数组中。然后最后只睡一段时间,然后遍历数组并杀死所有的pid。确实这适用于我非常简单的 poc:
#!/bin/bash
PIDS=()
(while :
do
echo '1'
sleep 1;
done) &
PIDS+=($!)
(while :
do
echo '2'
sleep 1;
done) &
PIDS+=($!)
(sleep 10; \
for p in "${PIDS[@]}"
do
kill $p
done)
但是当我做一些比echo
运行 phantomjs 更有趣的事情时,进程不会在间隔后被杀死。
有什么想法吗?我错过了什么?