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 你所需要知道的一切(会话、终端、守护进程、任务)