Bash 技巧合订本
进程与任务
进程查询
ps aux | grep $pattern
搜索进程
a
包含其他用户的进程
x
包含没有对应tty的进程
j
显示和任务控制相关的属性
u
显示和用户相关的属性
f
显示树状结构 (类似 pstree
)
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
查看正在使用文件的进程
top
动态查询
-d $interval
刷新间隔时间 (s)
-p $PID
指定进程
- 界面内排序:
M
按内存, P
按CPU (默认)
ls -l /proc/$PID/fd
查询进程占用的文件描述符以及其链接的设备
信号机制
信号 |
值 |
描述 |
1 |
SIGHUP |
挂起进程(退出shell时递归发送) |
2 |
SIGINT |
终止进程 <ctrl+c> |
3 |
SIGQUIT |
终止进程并生成核心转储文件<ctrl+\\> |
9 |
SIGKILL |
无条件终止进程 |
15 |
SIGTERM |
尽可能终止进程 |
17 |
SIGSTOP |
无条件停止进程,但不是终止进程 |
18 |
SIGTSTP |
暂停进程并放入后台<ctrl+z> |
19 |
SIGCONT |
继续运行停止的进程 bg |
- 信号发送
kill ( -$SIGNUM | -$SIGNAME ) ( $PID | -$PGID )
kill -$PGID
向进程组所有进程发送信号
kill -l
查询可用 signal
kill -9 <pid>
发送 9 号(SIGKILL)信号给 pid 指定的进程
<ctrl-c>
:发送 SIGINT ,中断进程
<ctrl-z>
:发送 SIGSTP,暂停进程
<ctrl-d>
:发送 SIGHUP,挂断进程(组)
- 可以使用
stty -a
列出中断信号与键盘的对应信息
- 信号捕获
trap <cmd>|<func> <signals>
trap ':' <signals>
恢复信号 handler
- SIGKILL 和 SIGSTOP 无法捕获
- 屏蔽挂断(脱机)
nohup
:这会使得执行的进程不受 SIGHUP 信号影响,即退出 shell 后仍然存在(session detached)
- 按照名称匹配进程 kill:
killall
进程调度
- 优先级干涉
nice
- 优先级 = PRI (by kernel) + nice (by user)
nice -n ${+-num} command
只能用于新命令
renice ${+-num} $PID
调整已有进程的 nice 值(一般用户只能往大了调)
任务控制
关于 Linux job control 你所需要知道的一切(会话、终端、守护进程、任务)