中断进程
目标
- 使用命令终端进程并与进程通信。
- 确定守护进程的特征
- 结束用户会话和进程
名词定义
- 使用信号控制进程
信号是传递至进程的软件中断。信号向执行中的程序报告事件。生成信号的事件可以是错误或外部事件(I/O请求或定时器过期),或者来自于显式使用信号发送命令或键盘序列。
下表列出了系统管理员用于日常进程管理的基本信号。请通过短名称或真确名称指代信号。
| 信号编号 | 短名称 | 定义 | 用途 |
|---|---|---|---|
| 1 | HUP | 挂起 | 用于报告中断控制进程的终止。也用于请求进程重新初始化(重新加载配置)而不终止。 |
| 2 | INT | 键盘中断 | 导致程序终止。可以被拦截或处理。通过按intr键序列(ctrl+c)发送。 |
| 3 | QUIT | 键盘退出 | 与SIGINT相似;在终止时添加进程转储。通过按QUIT键序列(ctrl+\)发送。 |
| 9 | KILL | 中断,无法拦截 | 导致立即终止程序。无法被拦截、忽略或处理;总是致命的。 |
| 15 | TERM | 终止 | 导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的“友好”方式;允许自我清理。 |
列出进程所有支持的信号:
[root@jenkins ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+237) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+147) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-152) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-857) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-362) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX 实操演示
- 杀死空闲进程
命令:kill
常用选项:
KILL(1) 10 KILL(1)
NAME (名称)
kill - 终止进程SYNOPSIS(总览)
kill[-ssignal|-p][-a]pid…
kill -l [ signal ]DESCRIPTION (描述)
kill 给指定进程发送指定信号. 如果没有指定信号, 则发送
TERM 信号. TERM 信号会杀死不能俘获该信号的进程.
对于其他进程, 可能需要使用 KILL (9) 信号,
因为该信号不能够被俘获.
大多数现代的 shell 有一个内嵌的 kill 函数.OPTIONS (选项)
-p 指定 kill 只打印命名进程的进程标识 (pid) ,
而不应发送给它信号.
- 在遇到该命令无法结束进程时,添加数字-9进行强制结束进程
命令:killall
常用选项:
root@jenkins ~]# killall –help
Usage: killall [-Z 上下文] [-u 用户名] [ -eIgiqrvw ] [ -信号 ] 程序名…
killall -l, –list
killall -V, –version
-e,–exact require exact match for very long names
-I,–ignore-case case insensitive process name match
-g,–process-group kill process group instead of process
-y,–younger-than kill processes younger than TIME
-o,–older-than kill processes older than TIME
-i,–interactive ask for confirmation before killing
-l,–list list all known signal names
-q,–quiet don’t print complaints
-r,–regexp interpret NAME as an extended regular expression
-s,–signal SIGNAL send this signal instead of SIGTERM
-u,–user USER kill only process(es) running as USER
-v,–verbose report if the signal was successfully sent
-V,–version display version information
-w,–wait wait for processes to die
-Z,–context 正则表达式 仅杀死含有指定上下文的进程
(必须在其他参数前使用)
[root@jenkins ~]# killall sleep
[1]+ 已终止 sleep 800
##杀死所有sleep进程。当需要停止多个时使用killall名进行匹配命令名称结束进程。命令:pkill
Usage:
pkill [options] <pattern>
Options:
-<sig>, --signal <sig> signal to send (either number or name)
-e, --echo display what is killed
-c, --count count of matching processes
-f, --full use full process name to match
-g, --pgroup <PGID,...> match listed process group IDs
-G, --group <GID,...> match real group IDs
-n, --newest select most recently started
-o, --oldest select least recently started
-P, --parent <PPID,...> match only child processes of the given parent
-s, --session <SID,...> match session IDs
-t, --terminal <tty,...> match by controlling terminal
-u, --euid <ID,...> match by effective IDs
-U, --uid <ID,...> match by real IDs
-x, --exact match exactly with the command name
-F, --pidfile <file> read PIDs from file
-L, --logpidfile fail if PID file is not locked
-h, --help display this help and exit
-V, --version output version information and exit
[root@jenkins ~]# pkill -u sinfotek
##结束sinfotek用户的所有进程。