2017-07-31 每天2个Linux命令 ps命令
Linux中的ps命令是Process Status的缩写。
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。
(1)用法:
用法: ps [选项参数] [用户名](可选)
(2)功能:
功能: 用来显示当前进程的状态。
ps命令可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,
使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、
哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
(3)选项参数:
1) -A 显示所有的进程
2) -e 显示所有的进程,与-A参数一样
3) -u 显示指定用户的信息
4) -a 显示所有终端机下执行的进程,除了阶段作业领导者之外。
5) a 显示现行终端机下的所有进程,包括其他用户的进程。
6) -H 显示树状结构,表示程序间的相互关系。 -j或j:采用工作控制的格式显示程序状况。
(4)实例:
1)[root@localhost sunjimeng]# ps -e|more -20 显示所有的进程
复制代码
[root@localhost sunjimeng]# ps -e|more -20
PID TTY TIME CMD
1 ? 00:00:05 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:05 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 rcuob/0
10 ? 00:00:00 rcuob/1
11 ? 00:00:00 rcuob/2
12 ? 00:00:00 rcuob/3
13 ? 00:00:00 rcuob/4
14 ? 00:00:00 rcuob/5
15 ? 00:00:00 rcuob/6
16 ? 00:00:00 rcuob/7
17 ? 00:00:00 rcuob/8
18 ? 00:00:00 rcuob/9
19 ? 00:00:00 rcuob/10
20 ? 00:00:00 rcuob/11
21 ? 00:00:00 rcuob/12
复制代码
-A命令与-e命令相同,都可以显示所有进程
复制代码
[root@localhost sunjimeng]# ps -A|more -10
PID TTY TIME CMD
1 ? 00:00:06 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:05 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 rcuob/0
10 ? 00:00:00 rcuob/1
11 ? 00:00:00 rcuob/2
--More--
2)[root@localhost sunjimeng]# ps -u root|more -10 显示指定用户的进程信息
复制代码
[root@localhost sunjimeng]# ps -u root|more -10
PID TTY TIME CMD
1 ? 00:00:06 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:05 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 rcuob/0
10 ? 00:00:00 rcuob/1
11 ? 00:00:00 rcuob/2
3)[root@localhost sunjimeng]# ps a ps a命令与ps -a命令
复制代码
[root@localhost sunjimeng]# ps a
PID TTY STAT TIME COMMAND
2004 tty1 Ssl+ 5:13 /usr/bin/Xorg :0 -background none -verbose -auth
/run/gdm/auth-for-gdm-8E54kT/database -seat seat0 -nolisten tcp
11465 pts/0 Ss 0:00 bash
11498 pts/0 S 0:00 su root
11504 pts/0 S 0:00 bash
11757 pts/0 R+ 0:00 ps a
[root@localhost sunjimeng]# ps -a
PID TTY TIME CMD
11498 pts/0 00:00:00 su
11504 pts/0 00:00:00 bash
11761 pts/0 00:00:00 ps
4)[root@localhost sunjimeng]# ps -ef|more -10 显示所有进程信息,连同命令行
复制代码
[root@localhost sunjimeng]# ps -ef|more -10
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:15 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 24
root 2 0 0 12:15 ? 00:00:00 [kthreadd]
root 3 2 0 12:15 ? 00:00:05 [ksoftirqd/0]
root 5 2 0 12:15 ? 00:00:00 [kworker/0:0H]
root 7 2 0 12:15 ? 00:00:00 [migration/0]
root 8 2 0 12:15 ? 00:00:00 [rcu_bh]
root 9 2 0 12:15 ? 00:00:00 [rcuob/0]
root 10 2 0 12:15 ? 00:00:00 [rcuob/1]
root 11 2 0 12:15 ? 00:00:00 [rcuob/2]
--More--
5)[root@localhost sunjimeng]# ps -ef|more -5 ps命令与grep命令结合起来查找指定的进程
复制代码
[root@localhost sunjimeng]# ps -ef|more -5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:15 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 24
root 2 0 0 12:15 ? 00:00:00 [kthreadd]
root 3 2 0 12:15 ? 00:00:05 [ksoftirqd/0]
root 5 2 0 12:15 ? 00:00:00 [kworker/0:0H]
[root@localhost sunjimeng]# ps -ef|grep kworker/0:0H
root 5 2 0 12:15 ? 00:00:00 [kworker/0:0H]
root 11981 11504 0 17:33 pts/0 00:00:00 grep --color=auto kworker/0:0H
6)[root@localhost sunjimeng]# ps -l 将目前属于您自己这次登入的 PID 与相关信息列示出来
[root@localhost sunjimeng]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 11498 11465 0 80 0 - 45979 wait pts/0 00:00:00 su
4 S 0 11504 11498 0 80 0 - 29064 wait pts/0 00:00:00 bash
0 R 0 11993 11504 0 80 0 - 30319 - pts/0 00:00:00 ps
说明:
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写
NI 这个是 Nice 值
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。
7)[root@localhost sunjimeng]# ps f 显示进程间的关系
复制代码
UID PID PPID C STIME TTY TIME CMD
root 11498 11465 0 17:17 pts/0 00:00:00 su root
root 11504 11498 0 17:17 pts/0 00:00:00 bash
root 12311 11504 0 17:52 pts/0 00:00:00 ps -f
[root@localhost sunjimeng]# ps f
PID TTY STAT TIME COMMAND
11498 pts/0 S 0:00 su root
11504 pts/0 S 0:00 \_ bash
12315 pts/0 R+ 0:00 \_ ps f
2004 tty1 Ssl+ 5:25 /usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm-8E54kT/database -seat seat0 -nolisten tcp
[root@localhost sunjimeng]#
8)root@localhost sunjimeng]# ps aux |more -10 列出目前所有的正在内存当中的程序
复制代码
root@localhost sunjimeng]# ps aux |more -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 60052 7796 ? Ss 12:15 0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 24
root 2 0.0 0.0 0 0 ? S 12:15 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 12:15 0:05 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 12:15 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 12:15 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 12:15 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 12:15 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 12:15 0:00 [rcuob/1]
root 11 0.0 0.0 0 0 ? S 12:15 0:00 [rcuob/2]
说明:
USER:该 process 属于哪一个个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
9)[root@localhost sunjimeng]# ps -axjf|more -10 列出类似程序树的程序显示
复制代码
[root@localhost sunjimeng]# ps -axjf|more -10
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:05 \_ [ksoftirqd/0]
2 5 0 0 ? -1 S< 0 0:00 \_ [kworker/0:0H]
2 7 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 8 0 0 ? -1 S 0 0:00 \_ [rcu_bh]
2 9 0 0 ? -1 S 0 0:00 \_ [rcuob/0]
2 10 0 0 ? -1 S 0 0:00 \_ [rcuob/1]
2 11 0 0 ? -1 S 0 0:00 \_ [rcuob/2]
2 12 0 0 ? -1 S 0 0:00 \_ [rcuob/3]
2017-07-31 每天2个Linux命令 kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行。 kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。
(1)用法:
用法: kill [选项] 参数
参数指的是进程或作业识别号,指定要删除的进程或作业。
(2)功能:
功能: 发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程 。
若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。
root用户将影响用户的进程,非root用户只能影响自己的进程。
(3)选项参数:
1) -a: 当处理当前进程时,不限制命令名和进程号的对应关系
2) -l <信息编号>: 若不加<信息编号>选项,则-l参数会列出全部的信息名称
3) -p: 指定kill 命令只打印相关进程的进程号,而不发送任何信号
4) -s <信息名称或编号>: 指定要送出的信息
(4)实例:
1)[sunjimeng@localhost ~]$ kill -l 列出所有的信号
复制代码
[sunjimeng@localhost ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
复制代码
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略,下面是常用的信号:
复制代码
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
2)[sunjimeng@localhost ~]$ kill 3429 查找并删除命令
复制代码
[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ 3429 2990 0 16:36 ? 00:00:00 /usr/bin/seapplet
sunjime+ 12918 11465 0 22:16 pts/0 00:00:00 grep --color=auto /usr/bin/seapplet
[sunjimeng@localhost ~]$ kill 3429
[sunjimeng@localhost ~]$ kill 12918
bash: kill: (12918) - 没有那个进程
[sunjimeng@localhost ~]$ kill 3429
bash: kill: (3429) - 没有那个进程
[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ 12932 11465 0 22:17 pts/0 00:00:00 grep --color=auto /usr/bin/seapplet
注意在测试时尽量不要删除root的进程。
3)[sunjimeng@localhost ~]$ kill -l KILL 显示指定信号的数值
[sunjimeng@localhost ~]$ kill -l KILL
9
[sunjimeng@localhost ~]$ kill -l TERM
15
4)[sunjimeng@localhost ~]$ kill -9 $(ps -ef |grep sunjimeng) 删除指定用户的所有进程
[sunjimeng@localhost ~]$ kill -u sunjimeng
bash: kill: u: 无效的信号声明
-u参数不能用了。删除指定用户的所有进程用下面的命令:
[sunjimeng@localhost ~]$ kill -9 $(ps -ef |grep sunjimeng)
5)[sunjimeng@localhost ~]$ kill -9 1 杀死init进程
[sunjimeng@localhost ~]$ kill -9 1
bash: kill: (1) - 不允许的操作
[sunjimeng@localhost ~]$
init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,
就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
其它所有进程都是init进程的子孙。init进程是不可杀的!
(5)其他:
Linux进程的管理:
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。
我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让
它们能够很好地为用户服务。 Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。
1)交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
2)批处理进程和终端没有联系,是一个进程序列。
3)监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。
kill命令的工作原理是:
向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。
比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。
在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,
可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。