其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。根据常规篇,可以知道ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。
改进7:
难道每次都要调用xargs把PID传递给kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
改进8:
没错,命令依然有点长,换成pgrep。
$kill -s 9 `pgrep firefox`
改进9——pkill:
看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。之前我一直以为是 "-s 9",结果每次运行都无法终止进程。
改进10——killall:
killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。
$killall -9 firefox
附录:各种信号及其用途
Signal
Description
Signal number on Linux x86[1]
SIGABRT
Process aborted
6
SIGALRM
Signal raised by alarm
14
SIGBUS
Bus error: "access to undefined portion of memory object"
7
SIGCHLD
Child process terminated, stopped (or continued*)
17
SIGCONT
Continue if stopped
18
SIGFPE
Floating point exception: "erroneous arithmetic operation"
8
SIGHUP
Hangup
1
SIGILL
Illegal instruction
4
SIGINT
Interrupt
2
SIGKILL
Kill (terminate immediately)
9
SIGPIPE
Write to pipe with no one reading
13
SIGQUIT
Quit and dump core
3
SIGSEGV
Segmentation violation
11
SIGSTOP
Stop executing temporarily
19
SIGTERM
Termination (request to terminate)
15
SIGTSTP
Terminal stop signal
20
SIGTTIN
Background process attempting to read from tty ("in")
21
SIGTTOU
Background process attempting to write to tty ("out")
22
SIGUSR1
User-defined 1
10
SIGUSR2
User-defined 2
12
SIGPOLL
Pollable event
29
SIGPROF
Profiling timer expired
27
SIGSYS
Bad syscall
31
SIGTRAP
Trace/breakpoint trap
5
SIGURG
Urgent data available on socket
23
SIGVTALRM
Signal raised by timer counting virtual time: "virtual timer expired"
26
SIGXCPU
CPU time limit exceeded
24
SIGXFSZ
File size limit exceeded
25