ps命令和jobs kill

2024-04-30 14:58
文章标签 命令 kill ps jobs

本文主要是介绍ps命令和jobs kill,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-5/根据需要选择和排列进程的显示方式

使用 ps

到目前为止所讨论的 ps 命令仅列出从终端会话启动的进程(注意清单 14 中的第二个例子的 SID 列,即会话 ID 列)。要通过控制终端查看所有进程,使用 -a 选项。-x 选项显示不使用控制终端的进程-e 选项显示每一个进程的信息。清单 17 显示带控制终端的所有进程的完整格式。

清单 17. 显示其他进程
ian@attic4:~$ ps -af
UID        PID  PPID  C STIME TTY          TIME CMD
ian       3878  2643  0 09:17 pts/1    00:00:06 xclock -d -update 1
ian       5485  2643  0 15:00 pts/1    00:00:00 sh pmc.sh
ian       5487  2643  0 15:01 pts/1    00:00:00 bash pmc.sh
ian       7192  5485  0 16:00 pts/1    00:00:00 sleep 30
ian       7201  5487  0 16:00 pts/1    00:00:00 sleep 30
ian       7202  2095  0 16:00 pts/0    00:00:00 ps -af

注意在 TTY 列中列出的控制终端。为了获取这个列表,我已切换到原先打开的终端窗口(pts/0),因此 ps -af 命令在 pts/0 下运行,尽管为本文创建的命令在 pts/1 下运行。

有许多针对 ps 的选项,包括控制显示哪些字段和以何种方式显示的选项。其他选项控制选择显示的进程,例如,为特定的用户(-u)或命令(-C)选择这些进程。在清单 18 中,列出了所有运行 getty 命令的进程;我们使用 -o 选项来自指定将要显示的列。我们将 user 选项添加到单纯使用 ps 获取到的常规列表,因此您可以看到哪个用户正在运行 getty                

清单 18. 谁正在运行 getty 命令?
ian@attic4:~$ ps -C getty -o user,pid,tty,time,comm
USER       PID TT           TIME COMMAND
root      1192 tty4     00:00:00 getty
root      1196 tty5     00:00:00 getty
root      1209 tty2     00:00:00 getty
root      1219 tty3     00:00:00 getty
root      1229 tty6     00:00:00 getty
root      1731 tty1     00:00:00 getty

有时您需要根据特定的字段对输出进行排序,您也可以使用 --sort 选项指定要排序的字段来实现该目的。默认值为以升序的方式进行排序(+),但您也可以指定以降序的方式进行排序(-)。清单 19 显示了最终的 ps 例子,其中使用作业的格式列出了所有进程,并且根据会话 ID 和命令名对输出进程排序。首先,我们使用默认的排序;其次,我们显式地指定这两种排序方式。

清单 19. 对来自 ps 命令的输出进行排序
ian@attic4:~$ ps -aj --sort -sid,+commPID  PGID   SID TTY          TIME CMD5487  5487  2643 pts/1    00:00:00 bash9434  9434  2643 pts/1    00:00:00 ps5485  5485  2643 pts/1    00:00:00 sh9430  5485  2643 pts/1    00:00:00 sleep9433  5487  2643 pts/1    00:00:00 sleep3878  3878  2643 pts/1    00:00:10 xclock8019  8019  2095 pts/0    00:00:00 man8033  8019  2095 pts/0    00:00:00 pager
ian@attic4:~$ ps -aj --sort sid,commPID  PGID   SID TTY          TIME CMD8019  8019  2095 pts/0    00:00:00 man8033  8019  2095 pts/0    00:00:00 pager5487  5487  2643 pts/1    00:00:00 bash9435  9435  2643 pts/1    00:00:00 ps5485  5485  2643 pts/1    00:00:00 sh9430  5485  2643 pts/1    00:00:00 sleep9433  5487  2643 pts/1    00:00:00 sleep3878  3878  2643 pts/1    00:00:10 xclock

和平常一样,查看手册页详细了解您可以指定多少个选项和字段,或者使用 ps --help 命令了解简要说明。

使用 top

如果您在一行内多次运行 ps,以便看看发生了什么变化,您可能需要改用 top 命令。它显示持续更新的进程列表和有用的摘要信息。清单 20 显示 top 命令输出的前几行。使用子命令 q  退出 top

清单 20. 使用 top 显示进程
top - 16:07:22 up 18:29,  5 users,  load average: 0.03, 0.02, 0.00
Tasks: 170 total,   1 running, 169 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.1%us,  0.5%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4057976k total,  1543616k used,  2514360k free,   194648k buffers
Swap: 10241428k total,        0k used, 10241428k free,   613000k cachedPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND6820 ian       20   0  506m  78m  26m S    1  2.0   0:23.97 firefox1381 root      20   0  634m  40m  18m S    1  1.0   2:06.74 Xorg2093 ian       20   0  212m  15m  10m S    1  0.4   0:13.53 gnome-terminal6925 ian       20   0 1118m 298m  19m S    1  7.5   1:07.04 java6855 ian       20   0 73416  11m 8808 S    1  0.3   0:05.01 npviewer.bin7351 ian       20   0 19132 1364  980 R    0  0.0   0:00.07 top1 root      20   0 19584 1888 1196 S    0  0.0   0:00.74 init2 root      15  -5     0    0    0 S    0  0.0   0:00.01 kthreadd

top 命令有许多子命令,其中开始学习时最有用的子命令为:

h
获得帮助
q
退出 top 命令
f
在显示结果中添加或删除字段
o
显示顺序
F
选择需要根据其进行排序的字段

查看手册页详细了解 top 的各种选项,包括如何根据内存使用或其他标准进行排序。清单 21 显示了一个根据虚拟内存使用量以降序的方式进行排序的例子。

清单 21. 对 top 命令的输出结果进行排序
top - 16:21:48 up 18:43,  5 users,  load average: 0.16, 0.06, 0.01
Tasks: 170 total,   3 running, 167 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.1%us,  0.8%sy,  0.0%ni, 96.6%id,  0.0%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:   4057976k total,  1588940k used,  2469036k free,   195412k buffers
Swap: 10241428k total,        0k used, 10241428k free,   613056k cachedPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            6925 ian       20   0 1171m 338m  21m S    0  8.5   1:44.10 java               1381 root      20   0  634m  40m  18m S    0  1.0   2:13.63 Xorg                6820 ian       20   0  506m  83m  26m S    3  2.1   0:51.28 firefox            2004 ian       20   0  436m  23m  15m S    0  0.6   0:01.55 nautilus           2031 ian       20   0  419m  13m  10m S    0  0.3   0:00.11 evolution-alarm    2118 ian       20   0  372m  10m 7856 S    0  0.3   0:00.06 evolution-data-    2122 ian       20   0  344m  13m  10m S    0  0.3   0:00.10 evolution-excha    2001 ian       20   0  331m  22m  14m S    0  0.6   0:13.61 gnome-panel        1971 ian       20   0  299m 9.9m 7244 S    0  0.3   0:05.00 gnome-settings-    1989 ian       20   0  288m  15m  11m S    0  0.4   0:11.95 metacity           1954 ian       20   0  265m 5460 3412 S    0  0.1   0:00.28 pulseaudio

向进程发送信号

现在,让我们看一下 Linux 信号,它是一种与进程通信的异步方式。我们已经提到 SIGHUP 信号并且使用了 Ctrl-c 和 Ctrl-z 组合键,它们是向进程发送信号的其他方式。发送信号的常见方式是使用 kill 命令。

使用 kill 命令发送信号

kill 命令将信号发送到指定的作业或进程。清单 22 显示使用 SIGTSTP 和 SIGCONT 信号来停止和恢复后台作业。使用 SIGTSTP 信号等效于使用 fg 命令将作业放到前台并使用 Ctrl-z 暂停它。使用 SIGCONT 类似于使用 bg 命令。

清单 22. 停止和重新启动后台作业
ian@attic4:~$ kill -s SIGTSTP %1[1]+  Stopped                 xclock -d -update 1
ian@attic4:~$ jobs -l
[1]+  3878 Stopped                 xclock -d -update 1
[2]   5485 Running                 nohup sh pmc.sh &
[3]-  5487 Running                 nohup bash pmc.sh &
ian@attic4:~$ kill -s SIGCONT 3878
ian@attic4:~$ jobs -l
[1]   3878 Running                 xclock -d -update 1 &
[2]-  5485 Running                 nohup sh pmc.sh &
[3]+  5487 Running                 nohup bash pmc.sh &

在本例中,我们使用作业指示 (%1) 停止 xclock 进程,然后使用进程 ID(PID)重新启动(继续)它。如果您停止 job %2,然后使用 tail 及其后面的 -f 选项,您将看到仅有一个进程正在更新 nohup.out 文件。

您可以使用 kill -l 在系统中显示许多其他信号。其中一些信号用于报告错误,比如非法操作代码,浮点异常,或试图访问进程无权访问的内存。注意,信号也有编号(比如 20)和名称(比如 SIGTSTP)。您可以使用连字符 (-) 前面的编号,也可以使用 -s 选项和信号名。在我的系统中,我使用 kill -20,而不是 kill -s SIGTSTP。在确定哪个编号对应哪个信号之前,您应该检查系统中信号的编号。

信号处理程序和进程终止

您已经看到使用 Ctrl-c 可以终止进程。事实上,它向进程发送一个 SIGINT(或中断)信号。如果您使用不带任何信号名的 kill,它将发送一个 SIGTERM 信号。在大多数情况下,这两个信号是等效的。

您已经看到 nohup 命令可以让进程避开 SIGHUP 信号。一般情况下,进程可以实现一个信号处理程序捕捉 信号。因此进程可以实现信号处理程序来捕捉 SIGINT 或 SIGTERM。因为信号处理程序知道发送的信号是什么,所以它可能选择忽略 SIGINT,并且在收到(比如)SIGTERM 时才终止。清单 23 显示了如何将 SIGTERM 信号发送到 job %2。注意,在发送信号之后,进程状态立即显示为 “Terminated”。如果我们使用 SIGINT,将显示为 “Interrupt”。在片刻之后,将开始清除进程,作业也不再出现在作业列表中。

清单 23. 使用 SIGTERM 终止进程
ian@attic4:~$ kill -s SIGTERM %2
ian@attic4:~$ 
[2]-  Terminated              nohup sh pmc.sh
ian@attic4:~$ jobs -l
[1]-  3878 Running                 xclock -d -update 1 &
[3]+  5487 Running                 nohup bash pmc.sh &

信号处理程序给进程提供了很大的灵活性。进程可以完成其常规工作,并且为了实现特定目的可以被信号中断。除了允许进程捕捉终止请求和采取可能的行动(比如关闭正在进行的文件或检查点事务)之外,信号还通常用于告诉守护进程重新读取其配置文件和重启操作。您在添加新的打印程序时可能要更改网络参数或 line printer daemon (lpd),这时可能需要进行该操作。

无条件终止进程

有一些信号是无法捕获的,比如某些硬件异常。您最常用的 SIGKILL 就不能被信号处理程序捕捉到,因此需要无条件终止它。总而言之,仅当所有办法都无法终止进程时,才选择无条件终止它。

这篇关于ps命令和jobs kill的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949175

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达