进程操作
查看现有进程
$ 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 -9 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