我经常需要在编程期间杀死进程.
我现在这样做的方式是:
[~]$ ps aux | grep 'python csp_build.py'
user 5124 1.0 0.3 214588 13852 pts/4 Sl+ 11:19 0:00 python csp_build.py
user 5373 0.0 0.0 8096 960 pts/6 S+ 11:20 0:00 grep python csp_build.py
[~]$ kill 5124
Run Code Online (Sandbox Code Playgroud)
如何自动提取进程ID并在同一行中终止它?
像这样:
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
Run Code Online (Sandbox Code Playgroud) 如何在bash脚本中等待从该脚本生成的几个子进程完成并返回退出代码!= 0当任何子进程以代码结束时!= 0?
简单的脚本:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Run Code Online (Sandbox Code Playgroud)
上面的脚本将等待所有10个生成的子进程,但它总是会给出退出状态0(请参阅参考资料help wait).如何修改此脚本,以便它发现生成的子进程的退出状态,并在任何子进程以代码!= 0结束时返回退出代码1?
有没有更好的解决方案,而不是收集子流程的PID,按顺序等待它们并总结退出状态?
我有一个命令CMD从我的主要bourne shell脚本调用,需要永远.
我想修改脚本如下:
有人能指点我完成这个吗?
除非绝对必要,否则不要使用kill -9!SIGKILL无法被捕获,因此被杀死的程序无法运行任何关闭例程来例如擦除临时文件.首先尝试HUP(1),然后是INT(2),然后是QUIT(3)
我原则上同意SIGKILL,但其余的对我来说都是新闻.鉴于发送的默认信号kill是SIGTERM,我预计它是任意进程正常关闭的最常见信号.此外,我已经看到SIGHUP用于非终止原因,例如告诉守护程序"重新读取您的配置文件".而且在我看来SIGINT(你通常用Ctrl-C得到的中断,对吗?)并没有得到应有的广泛支持,或者相当不合适地终止.
鉴于这SIGKILL是最后的手段 - 您应该向任意进程发送哪些信号以及以何种顺序发送信号,以便尽可能优雅地关闭它?
如果可以,请用支持事实(超出个人偏好或意见)或参考资料证实您的答案.
注意:我对包括考虑bash/Cygwin的最佳实践特别感兴趣.
编辑:到目前为止,似乎没有人提到INT或QUIT,并且有限提及HUP.是否有任何理由将这些包括在有序的过程中?
我尝试了这个代码,但它无法正常工作
#!/bin/sh
#Find the Process ID for syncapp running instance
PID=`ps -ef | grep syncapp 'awk {print $2}'`
if [[ -z "$PID" ]] then
Kill -9 PID
fi
Run Code Online (Sandbox Code Playgroud)
它在awk附近显示错误.
请给我任何建议.
我写了一个bash脚本来检查进程是否正在运行.它不起作用,因为ps命令总是返回退出代码1.当我从命令行运行ps命令时,$?是正确设置,但在脚本中它总是1.任何想法?
#!/bin/bash
SERVICE=$1
ps -a | grep -v grep | grep $1 > /dev/null
result=$?
echo "exit code: ${result}"
if [ "${result}" -eq "0" ] ; then
echo "`date`: $SERVICE service running, everything is fine"
else
echo "`date`: $SERVICE is not running"
fi
Run Code Online (Sandbox Code Playgroud)
Bash版本:GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
我们想检查当前是否通过PHP运行指定的进程.
我们想简单地提供一个PID并查看它当前是否正在执行.
PHP有一个内部函数可以提供给我们这些信息,还是我们必须从"ps"输出中解析它?
我的shLinux环境中有一个示例脚本,基本上运行的ssh-agent是当前shell,为它添加一个键并运行两个git命令:
#!/bin/bash
eval "$(ssh-agent -s)"
ssh-add /home/duvdevan/.ssh/id_rsa
git -C /var/www/duvdevan/ reset --hard origin/master
git -C /var/www/duvdevan/ pull origin master
Run Code Online (Sandbox Code Playgroud)
脚本实际上运行正常,但每次运行它都会得到一个新进程,所以我认为它可能会成为一个性能问题而且我最终可能会遇到无用的进程.
输出的一个例子:
Agent pid 12109
Identity added: /home/duvdevan/.ssh/custom_rsa (rsa w/o comment)
Run Code Online (Sandbox Code Playgroud)
此外,除此之外,是否可以找到现有ssh-agent流程并将其添加到其中?
我有一个PyQt准备发布的应用程序.一切都运作良好,我还有一件事要结束.我喜欢自我更新的软件:
问题是我不知道如何执行此更新.我检查,我发现新版本,我下载它然后我必须关闭应用程序并执行新版本的安装程序.如果我关闭它然后我不能执行任何其他,如果我执行安装程序我无法关闭应用程序.
基于一些用户选择我的程序还下载并安装了一些需要相同的第三方软件:安装程序前关闭,安装程序后重启.
我正在尝试使用以下代码检查进程是否正在运行:
SERVICE="./yowsup/yowsup-cli"
RESULT=`ps aux | grep $SERVICE`
if [ "${RESULT:-null}" = null ]; then
echo "not running"
else
echo "running"
fi
Run Code Online (Sandbox Code Playgroud)
但它仍然在回应它正在运行,虽然它不是.我意识到grep本身就是结果,这就是问题所在.
如何跳过grep并检查进程?
我想确保node在登录时正在运行。所以在我的.bashrc文件中我有:
pkill node
sleep 1
node server.js &
Run Code Online (Sandbox Code Playgroud)
当然,这不会检查是否node正在运行......它只是杀死它并重新启动它。相反,我想要这样的东西:
node_process = $(pidof node)
if [not_exists node_process]; then
node server.js &
fi
Run Code Online (Sandbox Code Playgroud)
问题是该not_exists方法似乎不存在:)。如何在 Bash 中测试数字或字符串是否存在,这是确保节点在登录时启动并运行的最佳方法吗?