我见过一些例子,但无法将它们应用于我的情况。
我有一个调用长时间运行的命令的脚本,但我想定期(例如每 1 秒)获取该调用的状态。例如:
#!/bin/bash
curl localhost:9200/my_index/_forcemerge?max_num_segments=2 &
while [ command is running ]; do
curl -XGET localhost:9200/_cat/shards/my_index?v&h=index,shard,prirep,segments.count
sleep 1
done
echo "finished!"
这样可以获取子进程的状态吗?
编辑:澄清我实际上在做什么。它实际上是针对 Elasticsearch 集群的两个curl 命令。长时间运行的命令将数据段合并在一起,“status”命令将获取当前的段计数。
我认为最安全的方法是保存子进程的进程 ID,然后定期检查子进程是否仍在运行:
#!/bin/bash
mycommand &
child_pid=$!
while kill -0 $child_pid >/dev/null 2>&1; do
echo "Child process is still running"
sleep 1
done
echo "Child process has finished"
变量$!
将保存在后台启动的最后一个进程的进程 ID。
The kill -0
不会向进程发送信号,它只会使kill
如果给定的进程 ID 存在并且属于正在执行的用户,则返回零退出状态kill
.
人们可以想出一个解决方案,使用pgrep
也是如此,但这可能会更“不安全”,因为必须小心不要捕获任何类似的正在运行的进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)