我经常需要在编程期间终止一个进程。
我现在的做法是:
[~]$ 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
如何自动提取进程id并在同一行中杀死它?
是这样的:
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
解决方案是用精确的模式过滤进程,解析pid,并构造一个参数列表来执行kill进程:
ps -ef | grep -e <serviceNameA> -e <serviceNameB> -e <serviceNameC> |
awk '{print $2}' | xargs sudo kill -9
文件说明:
Ps实用程序显示标题行,后面的行包含
关于拥有控制终端的所有进程的信息。
-e显示其他用户的进程信息
-f显示uid、pid、父pid、最近CPU使用率、进程启动
grep实用程序搜索任何给定的输入文件,选择行
-e pattern,——regexp=pattern
指定搜索输入期间使用的模式:输入
如果匹配任何指定的模式,则选择该行。
当使用多个-e选项时,此选项最有用
指定多个模式,或者当一个模式以破折号开始时
(“-”)。
Xargs -构造参数列表并执行实用程序
终止—终止进程或给进程发信号
9号信号- KILL(不可捕捉,不可忽略的杀死)
例子:
ps -ef | grep -e node -e loggerUploadService.sh -e applicationService.js |
awk '{print $2}' | xargs sudo kill -9
解决方案是用精确的模式过滤进程,解析pid,并构造一个参数列表来执行kill进程:
ps -ef | grep -e <serviceNameA> -e <serviceNameB> -e <serviceNameC> |
awk '{print $2}' | xargs sudo kill -9
文件说明:
Ps实用程序显示标题行,后面的行包含
关于拥有控制终端的所有进程的信息。
-e显示其他用户的进程信息
-f显示uid、pid、父pid、最近CPU使用率、进程启动
grep实用程序搜索任何给定的输入文件,选择行
-e pattern,——regexp=pattern
指定搜索输入期间使用的模式:输入
如果匹配任何指定的模式,则选择该行。
当使用多个-e选项时,此选项最有用
指定多个模式,或者当一个模式以破折号开始时
(“-”)。
Xargs -构造参数列表并执行实用程序
终止—终止进程或给进程发信号
9号信号- KILL(不可捕捉,不可忽略的杀死)
例子:
ps -ef | grep -e node -e loggerUploadService.sh -e applicationService.js |
awk '{print $2}' | xargs sudo kill -9
一个衬套:
Ps aux | grep -i csp_build | awk '{print $2}' | xargs sudo kill -9
打印列2:awk '{Print $2}'
Sudo是可选的
运行kill -9 5124, kill -9 5373等(kill -15更优雅,但稍慢)
奖金:
我还在.bash_profile中定义了2个快捷函数
(~ /。Bash_profile是用于osx的,你必须看看什么适用于你的*nix机器)。
p关键字
列出所有包含关键字的进程
用法例如:p csp_build, p python等
bash_profile代码:
# FIND PROCESS
function p(){
ps aux | grep -i $1 | grep -v grep
}
ka关键字
杀死所有具有此关键字的进程
用法例如:ka csp_build, ka python等
可选的kill级别,例如:ka csp_build 15, ka python 9
bash_profile代码:
# KILL ALL
function ka(){
cnt=$( p $1 | wc -l) # total count of processes found
klevel=${2:-15} # kill level, defaults to 15 if argument 2 is empty
echo -e "\nSearching for '$1' -- Found" $cnt "Running Processes .. "
p $1
echo -e '\nTerminating' $cnt 'processes .. '
ps aux | grep -i $1 | grep -v grep | awk '{print $2}' | xargs sudo kill -klevel
echo -e "Done!\n"
echo "Running search again:"
p "$1"
echo -e "\n"
}