Linux进程与作业管理

时间:2023-02-14 21:53:07

1、进程信息

●ps命令
格式:ps 选项
选项
-e 显示所有进程信息
-f 显示进程所有信息
-l 详细显示进程信息
-elf 显示所有进程详细信息(常用)
-eLf显示线程的相关信息,输出结果中LWP表示线程的tid,NLWP表示进程中线程的数目
-p 显示特定进程号的进程信息
-o 显示进程特定的信息,常与-e一起使用
-eo 显示所有进程的特定的列,比如cpu、mem、pid

●其他命令
pgrep 命令名 列出命令对应的pid
pgrep -u root top 列出用户名为root进程名为top的进程id
ps -t 终端 显示指定终端的进程信息,比如tty1、pts/0
pstree 树状查看进程信息
lsof 列出进程打开的文件
eg

ps -eo  pid,pcpu,pmem  显示所有进程的进程号和cpu以及内存使用率
ps -eo pid,pcpu,pmem --sort -pcpu 以cpu使用率为准采用降序排列 ,使用+可以升序排列
ps -eo pcpu,pid --sort -pcpu|sed -n '2p'|awk '{print ¥2}'打印出占用cpu最多的进程
ps -eo pcpu,pid |tail -n +2|sort -nr -k 1,1|sed -n '1p'|awk '{print ¥2}'打印出占用cpu最多的进程

2、作业控制

●将作业放入后台
command & 将命令放入后台执行,用户登出系统后终止运行。注意:部分命令不可以放入后台运行,如top、vim
nohup command & 将命令放入后台执行,即使用户登出系统仍然运行,命令的输出默认输出到当前文件夹下的nohup.out文件。注意: nohup不支持bash 内置的指令;登出系统而不是关闭系统

●显示作业信息
jobs 选项
选项
-l :显示作业对应的PID,
-r :仅显示后台正在运行的工作
-s :仅显示后台已经暂停的作业
jobs的输出结果中第一个数字为作业号,加号代表此作业是最后一个被放入后台运行的作业,减号代表倒数第二个被放入后台运行的作业
补充:后台运行的作业只有Running和Stopped两种状态,使用Ctrl+z放入后天运行的作业,默认都是Stopped状态

●控制后台作业
bg %num 在后台运行后台中停止的作业
fg %jobnumber 将后台中的作业放入前台运行,使用作业号指定具体的作业。将作业放入前台后,就可以使用Ctrl+c终止作业的运行。如果不指定作业号则默认将最后放入后台的作业放入前台运行,还可以使用减号代表倒数第二个放入后台的作业。
注意:bash 只能管理用户的作业而不能管理其他 用户的作业,即使是 root 也不能将别人的 bash 下面的 job 拿来运行

●控制命令的优先级
nice -n command 以优先级n启动一个命令,n越小优先级越高,n越大优先级越低,优先级高的命令会被频繁调度,命令默认优先级为0,最高为-20,最低为19,ps和top命令的输出中NI代表命令优先级
renice -n pid 改变正在运行的进程的优先级

●定时执行命令
watch -n num command 每num秒运行一次command命令

3、进程与作业的管理

●kill命令
格式
kill 选项 进程号或%jobnumber
选项
-l :显示可以使用的信号
-s :根据指定的信号名控制进程或作业,常用的SIGHUP、SIGINT、
-1 :重新读取配置文件,比如系统服务或守护进程 ,对应的信号名为SIGHUP
-2 :中断(interrupt)进程或作业,相当于Ctrl+c,对应的信号名为SIGINT
-9 :杀死作业或进程,有其他方法终止作业或进程就不要使用此选项,对应的信号名为SIGKILL
-15:终止(terminated)作业或进程,与-2选项基本等价,对应的信号名为SIGTERM
-20:相当于Ctrl+z,将前台的进程或作业放入后台,处于Stopped状态,对应的信号名为SIGTSTP

●killall命令
格式
killall 选项 进程名
选项
-l:打印所有已知信号列表
-e:对长名称(超过15个字符)进行精确匹配
-I:忽略大小写
-g:杀死进程所属的进程组
-i:交互式杀死进程,杀死进程前需要进行确认
-q:如果没有进程被杀死,则不输出任何信息
-r:使用正规表达式匹配进程
-s:根据指定的信号名控制进程或作业
-u:杀死指定用户的进程。
eg

kill -l
kill -2 %1 终止作业1,相当于kill -s SIGINT %1
ps -elf|grep httpd|awk '{print $4}'|xargs kill -2 终止nginx的所有进程
killall -2 nginx 终止nginx的所有进程