浅谈PS以及kill命令的常见用法

浅谈PS以及kill命令的常见用法


  ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的.
  ps命令用于显示当前进程 (process) 的状态,显示瞬间进程的状态,并不动态连续,常配合管道命令 | 和查找命令 grep 同时执行来查看特定进程


5种状态
PS标识状态码
1运行(正在运行或在运行队列中等待)R
2中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)S
3不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)D
4僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)T
5停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)Z

PS的参数非常多, 在此仅列出几个常用的参数

  -A 所有的进程均显示出来,与 -e 具有同样的效用;
  -a 显示现行终端机下的所有进程,包括其他用户的进程;
  c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
  -w 显示加宽可以显示较多的资讯
  -au 显示以用户为主较详细的资讯
  -aux 显示所有包含其他使用者的行程  
  -f 显示UID,PPIP,C与STIME栏位。
  au(x) 跟 **-ef**差不多
  -x 显示没有控制终端的进程,同时显示各个命令的具体路径

参数输出结果项目大概如下

UID     //用户ID、但输出的是用户名
PID     //进程的ID
PPID    //父进程ID
C       //进程占用CPU的百分比
STIME   //进程启动到现在的时间
TTY     //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD     //命令的名称和参数
%CPU    //进程占用的CPU百分比
%MEM    //占用内存的百分比
VSZ     //该进程使用的虚拟內存量(KB)
RSS     //该进程占用的固定內存量(KB)(驻留中页的数量)
STAT    //进程的状态
START   //该进程被触发启动时间
TIME    //该进程实际使用CPU运行的时间
D       //无法中断的休眠状态(通常 IO 的进程);
R       //正在运行可中在队列中可过行的;
S       //处于休眠状态;
T       //停止或被追踪;
W       //进入内存交换 (从内核2.6开始无效);
X       //死掉的进程 (基本很少见);
Z       //僵尸进程;
<       //优先级高的进程
N       //优先级较低的进程
L       //有些页被锁进内存;
s       //进程的领导者(在它之下有子进程);

PS常见用法

  • 查询你拥有的所有进程
    ps -x
  • 显示指定用户名(RUID)或用户ID的进程
    ps -fU apache
    ps -fU 48
  • 显示指定用户名(EUID)或用户ID的进程
    ps -fu wang
    ps -fu 1000
  • 查看以root用户权限(实际和有效ID)运行的每个进程
    ps -U root -u root
  • 列出某个组拥有的所有进程(实际组ID:RGID或名称)
    ps -fG nginx
  • 列出有效组名称(或会话)所拥有的所有进程
    ps -fg mysql
    ps -fg 27
  • 显示指定的进程ID对应的进程
    ps -fp 1234
  • 以父进程ID来显示其下所有的进程,如显示父进程为1234的所有进程
    ps -f --ppid 1234
  • 显示指定PID的多个进程
    ps -fp 1204,1239,1263
  • 要按tty显示所属进程
    ps -ft pts/0
  • 自定义格式显示文件系统组,ni值开始时间和进程的时间
    ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
  • 使用其PID查找进程名称:
    ps -p 1244 -o comm=
  • 要以其名称选择特定进程,显示其所有子进程
    ps -C sshd,bash
  • 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时
    这个参数很有用
    ps -C httpd,sshd -o pid=
  • 检查一个进程的执行时间
    ps -eo comm,etime,user | grep nginx
  • 查找占用最多内存和CPU的进程
    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
  • 显示安全信息
    ps -eM
    ps --context
  • 使用以下命令以用户定义的格式显示安全信息
    ps -eo euser,ruser,suser,fuser,f,comm,label
  • 使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命
    令显示每秒钟的监视
    watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head’

#Pgrep命令
  pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
选项参数如下:

-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称;
-P:指定父进程号;
-g:指定进程组;
-t:指定开启进程的终端;
-u:指定进程的有效用户ID。
-a: 显示完整格式的进程名

示例如下:

pgrep -lo sshd            #查找sshd进程最小的进程号以及名称
845 sshd
pgrep -ln sshd            #查找sshd进程最大的进程号以及名称
3427 sshd
pgrep -l sshd             #查找sshd进程全部的进程号以及名称
845 sshd
2540 sshd
2542 sshd
2605 sshd
2607 sshd
2704 sshd
2706 sshd
3425 sshd
3427 sshd
pgrep sshd              #显示sshd进程的全部进程号不显示名称
845 
2540 
2542 
2605 
2607 
2704 
2706 
3425 
3427 

KILL命令

  Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程.
  kill是一个内部命令,可用来向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
  kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号,如下所示。

常用信号:man 7 signal

  1. SIGHUP 无须关闭进程而让其重读配置文件
  2. SIGINT 中止正在运行的进程;相当于Ctrl+c
  3. SIGQUIT 相当于ctrl+\
  4. SIGKILL 强制杀死正在运行的进程
  5. SIGTERM 终止正在运行的进程
  6. SIGCONT 继续运行
  7. SIGSTOP 后台休眠

KILL有时候带几个选项参数

-a:当处理当前进程时,不限制命令名和进程号的对应关系;
-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
-s <信息名称或编号>:指定要送出的信息;
-u:指定用户。

示例:杀死指定用户所有进程

  • 方法一:先用ps查找进程,然后用kill杀掉

ps -ef | grep sshd
root       1696   1695  0 10:06 ?        00:00:00 sshd: root [priv]
root       1698   1696  0 10:06 ?        00:00:00 sshd: root@pts/0
root       1723   1695  0 10:07 ?        00:00:00 sshd: root [priv]
root       1725   1723  0 10:07 ?        00:00:00 sshd: root@pts/1
root       1748   1695  0 10:07 ?        00:00:00 sshd: root [priv]
root       1750   1748  0 10:07 ?        00:00:00 sshd: root@pts/2

kill 1696
kill 1698
.
.
.
-bash: kill: (3268) - 没有那个进程
  • 方法二:直接用进程名
killall  sshd             

Pkill是kill名令的是一个变种,pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。

  • 语法:pkill(选项)(参数)
  • 参数如下:
    -SIGNAL
    -u uid: effective user,生效者
    -U uid: real user,真正发起运行命令者
    -t terminal: 与指定终端相关的进程
    -l: 显示进程名(pgrep可用)
    -a: 显示完整格式的进程名(pgrep可用)
    -P pid: 显示指定进程的子进程。

示例:杀死指定用户所有进程

pkill sshd      

完 毕
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值