Linux 我是否可以等待不是当前shell终端子级的进程终止?
我有一个脚本,它必须杀死由高可用性中间件管理的资源若干次。它基本上是检查资源是否正在运行,然后将其杀死,我需要进程何时真正被杀死的时间戳。所以我做了以下代码:Linux 我是否可以等待不是当前shell终端子级的进程终止?,linux,shell,awk,process,kill,bash,Linux,Shell,Awk,Process,Kill,Bash,我有一个脚本,它必须杀死由高可用性中间件管理的资源若干次。它基本上是检查资源是否正在运行,然后将其杀死,我需要进程何时真正被杀死的时间戳。所以我做了以下代码: #!/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/has
#!/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不是这个shell的子进程,我假设您从启动子进程,然后启动这个脚本等待。问题在于,子进程不是运行脚本的子进程,而是其父进程的子进程 如果要在当前脚本中启动脚本,应从
开始
举个例子。您启动一个vim
,然后停止按^Z
(稍后您可以使用fg
返回vim
)。然后可以使用˙作业
命令获取作业列表
$ 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
在第一个版本创建新会话时,不会列出任何作业。但是使用
脚本在当前脚本中运行,该脚本正好有一个chold进程(即vim
)。因此,使用
启动上面的脚本,这样就不会创建任何子脚本
请注意,定义任何变量或更改目录(以及更多)都会影响您的环境!例如,PID将通过调用可见
评论:
- 不要使用
管道蛇!改用。| grep…| grep-v|awk---
李>。| awk…
- 在大多数Linux es中,您可以使用类似于以下内容的方法来获取pid,这样就可以避免整个管道
- 要从中调用外部程序,可以尝试
system(“mycmd”)代码>内置