ps命令支持三种使用的语法格式: UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符 BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符 GNU 风格的长选项,选项前有两个“-” 连字符
ps –ax #这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。
ps -ax | less
ps -u 用户名 #根据用户过滤进程,在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程
ps -u pungki
ps -aux | less #通过cpu和内存使用来过滤进程
ps -aux --sort -pcpu | less #根据 CPU 使用来降序排序
ps -aux --sort -pmem | less #根据 内存使用 来降序排序
ps -aux --sort -pcpu,+pmem | head -n 10 #根据 CPU、内存使用来降序排序,并只显示前10条
ps -C 进程名 #通过进程名过滤,比如想显示一个名为getty的进程的信息
ps -C getty #使用-f参数来查看格式化的信息列表:
ps -f -C getty
ps -L 1213 #查看特定进程的线程,可以使用-L 参数,后面加上特定的PID,下面查看1213进程的线程
ps –axjf #树形显示进程,或者
pstree
ps -eo pid,user,args #显示安全信息,如有谁登入了你的服务器
参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数是显示PID,运行应用的用户和该应用。能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。
ps -U root -u root u #查看由root用户运行的进程和这个进程的其他相关信息时
watch -n 1 'ps -aux --sort -pmem, -pcpu' #使用PS实时监控进程状态,每秒刷新一次
watch -n 1 'ps -aux --sort -pmem, -pcpu | head 20' #过CPU和内存的使用率来筛选进程,每秒刷新一次,并只显示前20条
ps -ef
和 ps aux
Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
ps -ef 是用标准的格式显示进程的、其格式如下
各列的内容意思如下
UID //用户ID、但输出的是用户名
PID //进程的ID
PPID //父进程ID
C //进程占用CPU的百分比
STIME //进程启动到现在的时间
TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD //命令的名称和参数
同ps -ef 不同的有列有
USER //用户名
%CPU //进程占用的CPU百分比
%MEM //占用内存的百分比
VSZ //该进程使用的虚拟內存量(KB)
RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
STAT //进程的状态
START //该进程被触发启动时间
TIME //该进程实际使用CPU运行的时间
其中STAT状态位常见的状态字符有
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ //位于后台的进程组;
使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:
kill pid #确定要杀死进程的PID或PPID
注:
标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
kill -l PID # -l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
kill -TERM PPID *TERM信号,给父进程发送一个TERM信号,试图杀死它和它的子进程。
ps -ef | grep httpd*检查httpd进程是否存在
注:
-e 显示所有进程。 -f 全格式。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系
| 是管道,grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
**killall命令**
killall #命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。
killall httpd #停止和重启进程
kill -HUP PID #让Linux温柔的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启时可以执行此命令(例如重启nginx经常用到这个命令)。
kill -9 PID #必杀技,当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
运行这条命令将会杀掉所有含有关键字"LOCAL=NO"的进程
ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
下面将这条命令作一下简单说明:
管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
"ps -ef" 是linux里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep LOCAL=NO"的输入。
"grep LOCAL=NO" 的输出结果是,所有含有关键字"LOCAL=NO"的进程。
"grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程。
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
另一种方法,使用awk
ps x|grep gas|grep -v grep |awk '{print $1}'|xargs kill -9