进程管理类命令

Posted fengciaimei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程管理类命令相关的知识,希望对你有一定的参考价值。

进程管理类命令

信号:

在linux当中所有的进行管理都是靠信号来管理的.像我们平时要结束某个进程就是使用的15信号SIGTERM,还有想要强制杀死某个进程,就是使用的9信号SIGKILL等等.

在linux可以查看信号有哪些的指定太多了,kill -l ; trap -l; man 7 signal等等

这里列数linux中的所有信号:

技术图片

 

 

 

信号名程有点长,信号有三种表示法:

  数字方式  9  2  3  1  19  15  18

  SIGNAL完整写法  SIGKILL SIGTERM SIGQUIT  SIGHUP  SIGINT  SIGSTOP

  简写法: HUP  INT QUIT CONT QUIT KILL TERM

 

信号虽然多,但是常用的没几个,常用的信号:

-0       进行命令的健康性检查,这种检查不严谨,意思意思

-1 SIGHUP   无须关闭进程而让其重读配置文件

-2 SIGINT    终止正在运行的进程,相当于ctrl + c,使用ctrl+c快捷键只能终止前台进程,但-2信号前台后台都能终止

-3 SIGQUIT   相当于ctrl +

-9 SIGKILL   强制杀死正在运行的进程

-15 SIGTERM   发送正常结束进程,15信号是结束不了停止态的进程,默认信号.TERM是terminal终端简写

-18 SIGCONT  复活进程 SIGCONT,但是不能复活那种交互的后台停止命令

-19 SIGSTOP   进入停止态  SIGSTOP

 

这里在重复说下,上面表里命名没有0信号,这里怎么还有0信号呢,这只是一个特殊的用法,可以不记,看下官方给0信号的解释:

If sig is 0, then no signal is sent, but error checking is still performed

如果这个信号是0,则不会真正的发送信号,到那时会进行错误检查

 

 

与信号相关的命令:

kill命令     用于向进程发送信号,以实现进程的管理

  选项:

    -l       显示信号列表

    kill -l #      把#对应的数字翻译成信号

    -s SIGNAL   指定发送的信号,一般可以直接简写成-SIGNAL

  语法:

    kill SIGNAL  PID1 PID2 ...   给PID进程发送SIGNAL信号

    kill SIGNAL  %JOBID     给作业编号%JOBID的进程发送SIGNAL信号

 

 

killall命令     根据进程名来管理进程

  主要用来批量结束相同命令名的进程

  语法:

    killall [-SIGNAL] COMMAND     使用命令名称来结束命令,而且是一次性结束所有

 

  killall -0 ping 检查ping命令是否是健康的,不严谨的检查

 

 

pkill命令     根据进程名或其他属性来结束进程

选项:

-t 终端      根据终端来查找相关进程并结束

-e        显示哪个进程被结束了,及其PID

-u EUID      结束有效UID

-U UID       结束实际UID

 

 

trap命令     捕获信号设定自定义操作

语法:

trap [OPTIONS] ‘CMD‘  SIGNAL   在收到系统发出的指定信号后执行自定义指令

trap ‘‘ SIGNAL           接收到信号,什么触发指令也不执行

trap ‘-‘ SIGNAL            恢复信号的原始作用

选项:

-p 列出自定义信号操作

-l 打印信号列表,等同于kill -l

 

 

 

 

 

 

 

作业管理:

在linux中拷贝文件真的太不舒服了,小文件还好,如果大文件了.那就得干等着了,什么也做不了.只能等cp命令结束后在操作.后来才知道可以把cp命令放入到后台继续执行.

 

把程序放到后台执行的方法:

  1. COMMAND & 可以让COMMAND在后台继续执行
  2. 先打开COMMAND命令,然后按ctrl + z让程序在后台暂停

让后台程序继续执行的方法:

  1. kill -18  COMMAND
  2. bg  %工作号 工作号可以通过jobs命令查询到

把后台程序挪回前台的方法:

  1. fg   %工作号 工作号可以通过jobs命令查询到

 

 

备注:无论是前台进程还是后台进程,都是当前shell的子进程,也就是会所在当前shell结束后子进程中前台进程还是后台进程都会结束.有没有不结束的方法吗?

三种在bash结束的时候不终止子进程的方法:

  1. 先运行screen命令,然后在执行要操作的命令
  2. 先运行tmux命令,然后在执行要做错的命令
  3. nohup COMMAND COMMAND就是要执行的命令

 

不是所有放入后台的进程都能继续执行,像那些占据终端前台窗口与用户有交互的命令是不能放在后台继续运行的,如vim  nano等等

 

后台进程不占据终端窗口,还可以在后台继续执行.这就可以实现程序的并行执行了.

方法1:

  cat all.sh

  COMMAND1 &

  COMMAND2 &

  COMMAND3 &

方法2:

  (COMMAND1&);(COMMAND2&);(COMMAND3&)

方法3:

  { COMMAND1; COMMAND2; }&  f2.sh&  f3.sh&

 

看个小示例:

 1 #/bin/bahs
 2 
 3 #
 4 
 5 NET=10.0.0.
 6 
 7  
 8 
 9 for i in {1..254};do
10 
11 {
12 
13 ping -c1 -w1 ${NET}${i} &> /dev/null && echo "${NET}${i} is up" || echo "${NET}${i} is down"
14 
15 }&
16 
17 done
18 
19 wait

 

 

 

 

小命令:

screen命令

主要作用是在shell窗口关闭时screen中的子进程不会关闭

选项:

-S 创建会话

-x 加入某个会话

-ls 列出已隐藏的会话

-r [SESSION] 恢复某个会话

Ctrl+a,d 隐藏会话,先按ctrl+a键,松开再按d键

 

案例一:

客户端一:创建新screen会话

  screen -S new

客户端二:加入new会话

  screen -x new

  然后在客户端一中键入的命令在客户端二上也能同步看到,同样的客户端二同样也可以操作.客户端已上也能看到客户端二操作.这就是QQ远程协助.嘿嘿

客户端二:退出new会话

  ctrl +a     松开再按d键

 

 

案例二:

创建会话  

  screen

执行某个耗时的命令例如

  tar -cJf /tmp/usr.tar.xz  /usr

隐藏会话

  ctrl+a   松开再按d键

可以断开终端去玩游戏吧

  exit

玩完回来看看耗时命令跑完了吗

  screen -ls

  screen -r [SESSION] [SESSION]    就是通过screen -ls查到的号码

 

tmux命令

tmux是screen的增强版,更加强大.不过也有一点不好,就是功能太强大.记不住

tmux窗口有大量的快捷键,所有的快捷键调用前都有一个前缀ctrl+b,只有先按下ctrl+b后快捷键才能生效.

创建会话:

  第一种:  tmux 直接创建一个编号为0的会话

  第二种:  tmux new -s NAME 创建一个名为NAME的会话

隐藏会话:

  按住ctrl + b 松开再按d键

关闭会话:

  第一种:  在会话中,按住ctrl+b 松开再按x键  确认即可

  第二种:  在bash中使用 tmux kill-session -t NAME

加入会话:

  tmux attach -t NAME

切换会话:

  tmux switch -t NAME

显示会话列表

  tmux ls

 

在tmux中有会话,窗口,窗格的概念.上边都是创建会话的类似screen的功能,下面的都是tmux独有的功能

 

创建新窗口:

  第一种:在bash中

    tmux new-window   创建一个新窗口默认名称是数字 0 1 3等等

    备注在创建窗口的时候前提必须先创建一个会话.把新窗口加入到这个会话中

    tmux new-window -n WIN-NAME     给新窗口起个名称

  第二种:在会话中

    按住ctrl +b,松开再按c 可以创建一个新窗口

    按住ctrl +b,松开再按, 可以给当前窗口重命名

切换窗口:

  第一种:在bash中

    tmux select-window -t WIN-NUMBER   切换到指定窗口号的窗口

    tmux select-window -t WIN-NAME     切换到指定窗口名称的窗口

  第二种:在会话中

    按住ctrl+b,松开再按p     切换到上一个窗口

    按住ctrl+b,松开再按n     切换到下一个窗口

    按住ctrl+b,松开再WIN-NUMBER   切换到指定窗口数字的窗口

    按住ctrl+b,松开再按w     从列表中选在要切换的窗口

隐藏会话:

  按住ctrl+b,松开再按d

关闭会话:

  按住ctrl+b,松开再按x  确认

 

 

创建窗格:

  按住ctrl+b,松开再按”   切换成上下窗格

  按住ctrl+b,松开再按%   切换成左右窗格

切换光标:

  按住ctrl+b,松开再按方向键   把光标移动到上下左右窗格上

  按住ctrl+b,松开再按;       把光标移动到上窗格

  按住ctrl+b,松开再按o     把光标移动到下窗格

  按住ctrl+b,松开再按{       把光标移动到左窗格

  按住ctrl+b,松开再按}      把光标移动到右窗格

切换窗格位置:

  按住ctrl+b,松开再按ctrl+o   当前光标所在窗格上移

  按住ctrl+b,松开再按alt+o    当前光标所在窗格下移

其他用法:

  按住ctrl+b,松开再按!     把当前窗格切换成一个单独的窗口

  按住ctrl+b,松开再按?     显示帮助,q退出

  按住ctrl+b,松开再按q     显示窗口序号

 

个人感觉tmux功能是强大,不过好似用不到这么多功能,或者说这强大功能是针对少数有需求的人.基础几个就好.笔记现在远程管理工具都支持标签了,鼠标点起来也挺方便的.tmux和screen的主要功能是在关闭shell后不断子进程.萝卜青菜各有所爱.

以上是关于进程管理类命令的主要内容,如果未能解决你的问题,请参考以下文章

linux进程管理——进程管理相关命令

Linux--命令大全/常用命令--管理类--内存/磁盘/进程--top/free/du/df/ps/pstree/kill/killall

Linux用户和组管理及其相关命令

Linux 进程管理命令之pidof

linux中进程和计划任务管理

Linux进程管理——进程调度