gpt4 book ai didi

linux - 我可以等待不是当前 shell 终端子进程的进程终止吗?

转载 作者:太空狗 更新时间:2023-10-29 11:18:55 25 4
gpt4 key购买 nike

我有一个脚本必须终止一定次数的由高可用性中间件管理的资源。它基本上检查资源是否正在运行并在之后杀死它,我需要 proc 真正被杀死的时间戳。所以我完成了这段代码:

#!/bin/bash
echo "$(date +"%T,%N") :New measures Run" > /home/hassan/logs/measures.log
for i in {1..50}

do
echo "Iteration: $i"
PID=`ps -ef | grep "/home/hassan/Desktop/pcmAppBin pacemaker_app/MainController"|grep -v "grep" | awk {'print$2'}`
if [ -n "$PID" ]; then
echo "$(date +"%T,%N") :Killing $PID" >> /home/hassan/logs/measures.log
ps -ef | grep "/home/hassan/Desktop/pcmAppBin pacemaker_app/MainController"|grep -v "grep" | awk {'print "kill -9 " $2'} | sh
wait $PID
else
PID=`ps -ef | grep "/home/hassan/Desktop/pcmAppBin pacemaker_app/MainController"|grep -v "grep" | awk {'print$2'}`
until [ -n "$PID" ]; do
sleep 2
PID=`ps -ef | grep "/home/hassan/Desktop/pcmAppBin pacemaker_app/MainController"|grep -v "grep" | awk {'print$2'}`
done
fi

done

但是使用我的 wait 命令,我收到以下错误消息:wait: pid xxxx is not a child of this shell

最佳答案

我假设您从 开始了子进程然后启动这个脚本等待。问题是子进程不是 的子进程运行脚本,但它的父级的 child !

如果您想在当前 中启动脚本您应该从 ..

开始

一个例子。你启动一个 vim 然后你停止按 ^Z (稍后你可以使用 fg 回到 vim)。然后您可以使用 ˙jobs 命令获取作业列表。

$ jobs
[1]+ Stopped vim myfile

然后您可以创建一个名为 test.sh 的脚本,其中只包含一个名为 jobs 的命令。添加执行权限(例如chmod 700 test.sh),然后启动它:

$ cat test.sh 
jobs
~/dev/fi [3:1]$ ./test.sh
~/dev/fi [3:1]$ . ./test.sh
[1]+ Stopped vim myfile

因为第一个版本创建了一个新的 session 未列出任何作业。但是使用 . 脚本在当前运行 脚本只有一个 chold 进程(即 vim)。所以使用 . 启动上面的脚本,所以没有 child 将被创建。

请注意,定义任何变量或更改目录(以及更多)都会影响您的环境!例如。 PID 将通过调用可见 !

评论:

  • 不要使用 ...|grep ...|grep -v ... |awk --- 管道蛇!请改用 ...|awk...!
  • 在大多数 Linux-es 中,您可以使用像这样的 ps -o pid= -C pcmAppBin 来获取 pid,因此可以避免完整的管道。
  • 调用外部程序你可以试试 system("mycmd"); 内置

希望对您有所帮助!

关于linux - 我可以等待不是当前 shell 终端子进程的进程终止吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com