进程与任务
进程管理
ps aux | grep $pattern
搜索进程
a
包含其他用户的进程
x
包含没有对应tty的进程
j
显示和任务控制相关的属性
u
显示和用户相关的属性
ps -p ${PID} -o ${OPT}=
查看指定进程的指定项目,项目是ps aux
表头的属性(小写)
- e.g.
ps -p 1 -o "%mem= %cpu="
ps -C $name1,$name2 -o ...
通过名称查询进程1、2
$ ps aux | sed '1p' -n
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
fuser -mv $blkdev|$mountpoint
查看正在使用挂载卷/文件系统的进程
lsof $file_path
查看正在使用文件的进程
信号机制
信号 |
值 |
描述 |
1 |
SIGHUP |
挂起进程 |
2 |
SIGINT |
终止进程 |
3 |
SIGQUIT |
停止进程 |
9 |
SIGKILL |
无条件终止进程 |
15 |
SIGTERM |
尽可能终止进程 |
17 |
SIGSTOP |
无条件停止进程,但不是终止进程 |
18 |
SIGTSTP |
停止或暂停进程,但不终止进程 |
19 |
SIGCONT |
继续运行停止的进程 |
- 信号发送
kill
kill -l
查询可用 signal
kill -9 <pid>
发送 9 号(SIGKILL)信号给 pid 指定的进程
<ctrl-c>
:发送 SIGINT ,中断进程
<ctrl-z>
:发送 SIGSTP,暂停进程
<ctrl-d>
:发送 SIGHUP,挂断进程(组)
- 信号捕获
trap
- 屏蔽挂断
nohup
:这会使得执行的进程不受 SIGHUP 信号影响,即退出 shell 后仍然存在(session detached)
任务控制
关于 Linux job control 你所需要知道的一切(会话、终端、守护进程、任务)
- 会话控制
setsid <command>
:让任务在一个新的detached的会话中运行
- 后台任务
jobs
:查看后台任务
<command> &
:运行任务 command 并放入后台执行
ctrl-z
:前台任务转移到后台,并且暂停(等效于发送SIGSTP信号)
fg %n
:后台任务拉至前台(n为jobs查到的任务编号)
bg %n
:执行后台任务(使后台任务从暂停处继续)
wait
:等待所有后台任务退出
- 计划任务
超时控制
timeout 1m30s <command>
:1m30s 后超时,发送signal给命令进城,并直接返回
-s <signal>
:指定超时后发送的信号(见 kill -l
)
- 返回值
124
command 超时
125
timeout 进程本身异常
126
命令无法调用
127
找不到命令
137
检测到外部 kill 信号
-
command 的返回状态
并发控制