进程操作

查看现有进程


$ ps -ef

或者:

$ ps -aux
 PID     USER    PR     NI  VIRT    RES    SHR S  %CPU %MEM     TIME+ 
gpu245 122844 1 0 09:17 ? 00:00:00 /lib/systemd/systemd gpu245 122845 122844 0 09:17 ? 00:00:00 (sd-pam)

此时如果我想杀了进程(ID:
122844)就在终端输入:
$ kill -s 9 122844

其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。

改进:

把ps的查询结果通过管道给grep查找包含特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
$ ps -ef | grep firefox
#或者!!
$ pgrep firefox
使用pidof:
(pid of xx)也就是 xx的PID。
$ pidof firefox-bin

 

$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9

说明:

“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。

“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。

“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。

“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。

 

知道pgrep和pidof两个命令,干嘛还要打那么长一串!

$ pgrep firefox | xargs kill -s 9

 

难道每次都要调用xargs把PID传递给kill?答案是否定的:

$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`

pgrep。

$kill -s 9 `pgrep firefox`

 

pkill:

pkill=pgrep+kill。

$pkill - firefox

说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。

 

killall:

killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。

$killall -9 firefox

 

 

参考:https://www.cnblogs.com/liaojie970/p/7131043.html

posted @ 2019-04-16 18:09  hozhangel  阅读(308)  评论(0编辑  收藏  举报