linux_任务/进程管理/进程查看/服务查看ps/进程前后台切换(jobs/bg/fg/ps)

网友投稿 274 2022-09-26

linux_任务/进程管理/进程查看/服务查看ps/进程前后台切换(jobs/bg/fg/ps)

文章目录

​​linux_任务/进程管理/进程查看/服务查看ps/进程前后台切换(jobs/bg/fg/ps)​​

​​reference​​

​​总览​​

​​进程查看ps​​

​​man列出的表格表头解释​​​​进程状态码取值含义(两种风格)​​

​​PSD style options(often use)​​

​​ps a​​​​ps x​​​​ps u​​​​进程和用户信息`ps --user/ps -u/ps U`​​​​real user & effective user​​

​​获取(匹配指定名称)PID​​

​​查看所有进程(ps -e选项)​​​​仅仅获取pid​​​​进程信息过滤/筛选(查找):grep with header​​​​获取指定进程名称的详细信息(ps -f(-F)选项)​​​​查看进程树(进程继承派生关系:ps --forest)​​

​​资源占用排序​​

​​内存资源占用排序​​​​cpu资源占用排序​​​​自定义ps显示格式(字段)​​

​​User-defined Format​​

​​进程切换/任务查看​​

​​关于job_id​​​​jobs:Display status of jobs​​​​fg:Move job to the foreground.​​​​& : 有预期的将某个任务挂在后台运行​​​​ctrl+z:挂起当前进程(suspend current process)​​​​bg:让挂起的后台运行起来​​​​Difference Between the bg Command and the “&” sign​​​​nohup:关闭/退出shell后任然运行​​

​​进程终止​​

​​kill家族命令​​​​references of terminate a process​​​​kill by pid series​​

​​获取进程号​​​​kill​​​​默认的kill行为(弱杀)​​​​结束所有你可以终止的进程​​​​强杀(必杀)​​​​查询信号名​​

​​kill by processName series​​

​​killall&pkill​​​​终止其他用户的进程(root privileges)​​​​How to kill only process(es) running as USER(specific user)​​

linux_任务/进程管理/进程查看/服务查看ps/进程前后台切换(jobs/bg/fg/ps)

reference

​​Linux / Unix: fg Command Examples - nixCraft (cyberciti.biz)​​​​HowTo: Use ps, kill, nice, and killall To Manage processes in FreeBSD and OS X Unix Operating System - nixCraft (cyberciti.biz)​​​​Linux and Unix ps command tutorial with examples | George Ornbo (shapeshed.com)​​​​How to use the bg command in Linux? - LinuxForDevices​​​​shell - Include header in the ‘grep’ result - Stack Overflow​​

总览

​​Linux Process Management | Five Types of Process in Linux Management (educba.com)​​

进程查看ps

ps 命令用法众多,是一个复杂命令,此处仅涉及基本用法有特别需求的用google搜一下常用的就一小部分​​man ps​​

man列出的表格表头解释

​​STANDARD FORMAT SPECIFIERS​​man ps|grep 'STANDARD FORMAT SPECIFIERS' -n231: The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired.280: k spec Specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]]. Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS section. The "+" is optional since312: Specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]]. Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS section. The "+" is optional since449:STANDARD FORMAT SPECIFIERS大致在第449行;使用​​449G​​指令可以快速跳转

进程状态码取值含义(两种风格)

PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process: D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped by job control signal t stopped by debugger during the tracing W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct ("zombie") process, terminated but not reaped by its parent For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group

ps命令自带使用示例以及说明This version of ps accepts several kinds of options: 1 UNIX options, which may be grouped and must be preceded by a dash. 2 BSD options, which may be grouped and must not be used with a dash. 3 GNU long options, which are preceded by two dashes.从中可以得知,ps 的选项的形式是多样的(三类) Options of different types may be freely mixed, but conflicts can appear.There are some synonymous options, which are functionally identical,due to the many standards and ps implementations that this ps is compatible with.不同风格的参数效果可能是一样的

EXAMPLES To see every process on the system using standard syntax: ps -e ps -ef ps -eF ps -ely To see every process on the system using BSD syntax: ps ax ps axu To print a process tree: ps -ejH ps axjf To get info about threads: ps -eLf ps axms To get security info: ps -eo euser,ruser,suser,fuser,f,comm,label ps axZ ps -eM To see every process running as root (real & effective ID) in user format: ps -U root -u root u To see every process with a user-defined format: ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -Ao pid,tt,user,fname,tmout,f,wchan Print only the process IDs of syslogd: ps -C syslogd -o pid= Print only the name of PID 42: ps -q 42 -o comm=

PSD style options(often use)

a Lift the BSD-style "only yourself" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like. The set of processes selected in this manner is in addition(as an extra thing, or circumstance.) to the set of processes selected by other means. 以这种方式选择的进程集信息是对通过其他方式选择的进程集的补充。 An alternate description is that this option causes ps to list all processes with a terminal (tty), or to list all processes when used together with the x option(x option could show the processes without a tty(terminal).

ps a

​​ps a​​​可以移除默认的​​only yourself​​进程信息输出规则限制

可以列出所有(直接/间接)绑定了某个terminal的进程(包括通过具有启动该进程的terminal(tty)的进程创建的子进程)(包括其他用户/其他terminal上执行的进程)但是某些特殊的用户的进程(譬如mysql以及相关服务)不具有启动的terminal,所以​​ps a​​仍然不会列出

The​​a​​ option tells ​​ps​​ to display the processes of all users.Only the processes that​​not associated with a terminal ​​and processes of group leaders are not shown.TTY controlling tty (terminal). (alias tt, tty).

可以看到TTY这一栏,各条进程信息在此栏上都为 非​​?​​值​​--forest​​​(GNU style)和​​f​​(BSD style)选项在功能上是等价的

ps x

​​ps x​​​可以移除默认的​​must have a tty​​输出限制

一般来说,​​x​​​可以用来查看系统进程和服务(tty值为​​?​​)(但是不限于系统进程,当前(指定)用户的前台进程也可以被列出来)The​​x​​​ option instructs​​ps​​​ to list the processes without a controlling terminal. Those are mainly processes that are started on boot time and​​running in the background​​ .

效果是查看当前用户(如果没有配合a选项),的所有进程(包括不是有在tty(terminal)直接创建(initiate)的进程)

而如果要看到其他用户的进程,就需要配合另一个BSD 选项​​a​​

x Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like. The set of processes selected in this manner is in addition to the set of processes selected by other means. - An alternate description is that this option causes ps to list all processes owned by you (same EUID as ps), or to list all processes when used together with the a option.

譬如,你使用man,查看某个命令的帮助,​​man​​会隐式调用系统的默认阅读器($PAGER)所定义的.

ps u

让ps 把process 的所属用户一并显示出来但其实不单单是将是显示一列userName(PID),而是让显示格式以详细的格式显示

​​u Display user-oriented format.​​​​u -- output in resource usage format​​显示

总之​​ps a​​​和​​ps x​​的显示结果一般是由重叠的部分(特别是当前用户的进程)两者配合,就可以看到所有的进程(而且还有进程状态​​STAT​​)​​a​​​&​​x​​下的每一条记录都是基本信息,只有显示格式上没有区别如果使用​​u​​,就可以显示详细的信息

进程和用户信息​​ps --user/ps -u/ps U​​

​​--user​​​是一个GNU style选项(等价于​​-u​​​ Unix styel;还等价于​​U​​BSD style)类似的​​--User​​​(等价于​​-U​​)U userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)). Identical to -u and --user. -U userlist Select by real user ID (RUID) or name. It selects the processes whose real user name or ID is in the userlist list. The real user ID identifies the user who created the process, see getuid(2). -u userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)). Identical to U and --user. --User userlist Select by real user ID (RUID) or name. Identical to -U. --user userlist Select by effective user ID (EUID) or name. Identical to -u and U.--user -u -- select processes by effective user--User -U -- select processes by real user

指定某个用户,列出所有相关进程

$ ps --user cxxu PID TTY TIME CMD13142 ? 00:00:00 sshd13143 pts/1 00:00:00 zsh15920 ? 00:00:00 sshd15921 pts/3 00:00:02 zsh19197 pts/1 00:00:00 man19208 pts/1 00:00:00 less20665 ? 00:00:00 sshd20666 pts/2 00:00:00 zsh22798 ? 00:00:00 sshd22799 pts/0 00:00:00 zsh22845 pts/0 00:00:00 man22856 pts/0 00:00:00 less22930 ? 00:00:00 sshd22931 pts/4 00:00:00 zsh23036 ? 00:00:00 sshd23039 pts/5 00:00:00 zsh25347 ? 00:00:00 sshd25348 pts/6 00:00:01 zsh26118 pts/6 00:00:00 ps30066 ? 00:00:00 systemd30067 ? 00:00:00 (sd-pam)## 获取详细信息# cxxu @ cxxuAli in ~ [16:00:03]$ ps -u cxxu -U cxxu ufUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDcxxu 27394 0.0 0.1 107992 3424 ? S 15:31 0:00 sshd: cxxu@pts/7cxxu 27395 0.0 0.3 60772 7280 pts/7 Ss 15:31 0:00 \_ -zshcxxu 25347 0.0 0.1 107992 3608 ? S 15:07 0:00 sshd: cxxu@pts/6cxxu 25348 0.0 0.3 61084 7672 pts/6 Ss 15:07 0:02 \_ -zshcxxu 29710 0.0 0.1 37376 3300 pts/6 R+ 16:00 0:00 \_ ps -u cxxu -U cxxu ufcxxu 23036 0.0 0.1 107992 3520 ? S 14:33 0:00 sshd: cxxu@pts/5cxxu 23039 0.0 0.3 58256 6808 pts/5 Ss+ 14:33 0:00 \_ -zshcxxu 22930 0.0 0.1 107992 3460 ? S 14:33 0:00 sshd: cxxu@pts/4cxxu 22931 0.0 0.3 58172 6596 pts/4 Ss+ 14:33 0:00 \_ -zshcxxu 22798 0.0 0.1 107992 3612 ? S 14:32 0:00 sshd: cxxu@pts/0cxxu 22799 0.0 0.3 58180 6744 pts/0 Ss 14:32 0:00 \_ -zshcxxu 22845 0.0 0.1 21384 3928 pts/0 S+ 14:32 0:00 \_ man pscxxu 22856 0.0 0.0 9856 976 pts/0 S+ 14:32 0:00 \_ lesscxxu 20665 0.0 0.1 107992 3496 ? S 14:04 0:00 sshd: cxxu@pts/2cxxu 20666 0.0 0.3 60628 7216 pts/2 Ss 14:04 0:00 \_ -zshcxxu 15920 0.0 0.1 107992 3432 ? S 13:08 0:00 sshd: cxxu@pts/3cxxu 15921 0.0 0.3 58484 7172 pts/3 Ss+ 13:08 0:02 \_ -zshcxxu 13142 0.0 0.1 107992 3492 ? S 12:29 0:00 sshd: cxxu@pts/1cxxu 13143 0.0 0.3 60940 7432 pts/1 Ss 12:29 0:00 \_ -zshcxxu 19197 0.0 0.1 21384 3832 pts/1 S+ 13:49 0:00 \_ man pscxxu 19208 0.0 0.1 9856 2472 pts/1 S+ 13:49 0:00 \_ lesscxxu 30066 0.0 0.3 76520 7328 ? Ss 09:15 0:00 /lib/systemd/systemd --usercxxu 30067 0.0 0.1 111644 2364 ? S 09:15 0:00 \_ (sd-pam)

配合BSD 选项​​u​​​该命令也可以列出详细信息(带​​STAT​​)

# cxxu @ cxxuAli in ~ [15:15:21]$ ps u --user cxxuUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDcxxu 13142 0.0 0.1 107992 3492 ? S 12:29 0:00 sshd: cxxu@pts/1cxxu 13143 0.0 0.3 60940 7432 pts/1 Ss 12:29 0:00 -zshcxxu 15920 0.0 0.1 107992 3432 ? S 13:08 0:00 sshd: cxxu@pts/3cxxu 15921 0.0 0.3 58484 7172 pts/3 Ss+ 13:08 0:02 -zshcxxu 19197 0.0 0.1 21384 3832 pts/1 S+ 13:49 0:00 man pscxxu 19208 0.0 0.1 9856 2472 pts/1 S+ 13:49 0:00 lesscxxu 20665 0.0 0.1 107992 3496 ? S 14:04 0:00 sshd: cxxu@pts/2cxxu 20666 0.0 0.3 60628 7216 pts/2 Ss 14:04 0:00 -zshcxxu 22798 0.0 0.1 107992 3612 ? S 14:32 0:00 sshd: cxxu@pts/0cxxu 22799 0.0 0.3 58180 6744 pts/0 Ss 14:32 0:00 -zshcxxu 22845 0.0 0.1 21384 3928 pts/0 S+ 14:32 0:00 man pscxxu 22856 0.0 0.0 9856 976 pts/0 S+ 14:32 0:00 lesscxxu 22930 0.0 0.1 107992 3460 ? S 14:33 0:00 sshd: cxxu@pts/4cxxu 22931 0.0 0.3 58172 6596 pts/4 Ss+ 14:33 0:00 -zshcxxu 23036 0.0 0.1 107992 3520 ? S 14:33 0:00 sshd: cxxu@pts/5cxxu 23039 0.0 0.3 58256 6808 pts/5 Ss+ 14:33 0:00 -zshcxxu 25347 0.0 0.1 107992 3608 ? S 15:07 0:00 sshd: cxxu@pts/6cxxu 25348 0.2 0.3 60740 7304 pts/6 Ss 15:07 0:01 -zshcxxu 26204 0.0 0.1 37376 3344 pts/6 R+ 15:15 0:00 ps u --user cxxucxxu 30066 0.0 0.3 76520 7328 ? Ss 09:15 0:00 /lib/systemd/systemd --usercxxu 30067 0.0 0.1 111644 2364 ? S 09:15 0:00 (sd-pam)

real user & effective user

The real user ID identifies the user who​​created the process​​, see getuid(2).

进程是谁创建出来的

The effective user ID describes the user ([whose file access permissions]​​are used by the process​​)创建user1专属文件,user2借助root权限进行访问?

RUID:user2EUID:root?

获取(匹配指定名称)PID

ps命令的一下两个选项比较常用(类似于​​ps axu​​);是UNIX风格的选项-e-f

查看所有进程(ps -e选项)

ps​​-e​​可以获取所有进程信息

仅仅获取pid

On many systems the ​​pgrep​​​ command also exists that supports a number of ways to search for a process id. This is very useful if you are just interested in process id rather than other information. To search for all processes for an executable the ​​pgrep​​ command can be used.

​​pgrep​​

# cxxu @ cxxuAli in ~ [11:09:41]$ ping zhihu.comPING zhihu.com (103.41.167.234) 56(84) bytes of data.64 bytes from 103.41.167.234 (103.41.167.234): icmp_seq=1 ttl=49 time=13.8 ms64 bytes from 103.41.167.234 (103.41.167.234): icmp_seq=2 ttl=49 time=13.8 ms64 bytes from 103.41.167.234 (103.41.167.234): icmp_seq=3 ttl=49 time=13.8 ms^Z[4] + 2678 suspended ping zhihu.com# cxxu @ cxxuAli in ~ [11:09:59] C:148$ pgrep ping267828415

进程信息过滤/筛选(查找):grep with header

grep 本身似乎没有办法保留列表的项目栏(属性字段名称)借助​​head -1​​来拿到表头项目栏

some-command | { head -1; grep some-stuff; }

譬如,将some-command 用实际命令​​ps -ef​​来替代

# cxxu @ cxxuAli in ~ [12:51:52]$ ps -ef|{head -1;grep ping}UID PID PPID C STIME TTY TIME CMDcxxu 2678 26714 0 11:09 pts/0 00:00:00 ping zhihu.comcxxu 28415 26714 0 10:03 pts/0 00:00:00 ping baidu.com

获取指定进程名称的详细信息(ps -f(-F)选项)

​​ps​​​:​​ -f​​选项可以获得详细信息

​​-F​​会获取更加丰富的信息​​u ​​(BSD style)最丰富

宽松匹配

psh(){ # ps -ef|grep '.*CMD$|pattern' ps -ef|{head -1;grep "$1"}}

严格匹配

psh(){ # ps -ef|grep '.*CMD$|pattern' ps -ef|{head -1;grep "$1\b"}}

可以将上述代码写入到配置文件中

利用参数化别名来代替​​pgrep​​获取详细信息(而不仅仅是指定进程名称的PID字段信息)用法:​​psh |​​

# cxxu @ cxxuAli in ~ [13:12:34]$ psh pingUID PID PPID C STIME TTY TIME CMDcxxu 2678 26714 0 11:09 pts/0 00:00:00 ping zhihu.comcxxu 28415 26714 0 10:03 pts/0 00:00:00 ping baidu.com

查看进程树(进程继承派生关系:ps --forest)

# cxxu_kali @ CxxuWin11 in ~ [22:07:34] C:1$ ps -e --forest PID TTY TIME CMD 1 ? 00:00:00 init 9 tty1 00:00:00 init 10 tty1 00:00:06 \_ zsh 1046 tty1 00:00:00 \_ man 1057 tty1 00:00:00 \_ less 884 tty2 00:00:00 init 885 tty2 00:00:01 \_ zsh 1312 tty2 00:00:00 \_ man 1323 tty2 00:00:00 \_ less 1341 tty3 00:00:00 init 1342 tty3 00:00:10 \_ zsh 4414 tty3 00:00:00 \_ ps 3742 tty5 00:00:00 init 3743 tty5 00:00:02 \_ zsh 3911 tty4 00:00:00 init 3912 tty4 00:00:00 \_ zsh

资源占用排序

The​​ps​​ command also allows you to sort the output.

For example, to sort the output based on the​​memory usage​​ , you would use:

内存资源占用排序

ps aux --sort=-%mem|less

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDmysql 1557 0.0 17.9 1145052 366240 ? Sl Mar29 10:22 /--basedir=/--datadir=/--plugin-dir=/--user=mysql --log-error=cxxuAli.err --open-files-limit=65535 --pid-file=/--socket=/tmp/mysql.sock --port=3306root 245 0.0 3.3 193228 68552 ? S

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1112 1.1 1.1 149104 23372 ? S

可见,阿里云盾(AliyunDun)占用最多cpu资源

自定义ps显示格式(字段)

User-defined Format

The​​o​​​ option allows you to specify which columns are displayed when running the​​ps​​ command.For example, to print information only about the​​PID​​​ and​​COMMAND​​, you would run one of the following commands:自定义时最好不要用​​u​​(BSD),容易造成冲突(u尝试显示所有字段),导致自定义字段相互冲突而失败(error:conflicting format options)!

# version1:UNIX standard styleps -efo pid,comm# version2:BSD styleps axo pid,comm # cxxu @ cxxuAli in ~ [16:20:47]$ ps af o euser,ruser,commEUSER RUSER COMMANDcxxu cxxu zshcxxu cxxu \_ mancxxu cxxu \_ lessroot root bashroot root \_ vimcxxu cxxu zshcxxu cxxu zshcxxu cxxu \_ pscxxu cxxu zshcxxu cxxu zshcxxu cxxu zshcxxu cxxu \_ mancxxu cxxu \_ lesscxxu cxxu zshcxxu cxxu zshroot root agettyroot root agetty

进程切换/任务查看

关于job_id

​​process - How to get the Job ID? - Unix & Linux Stack Exchange​​

jobs:Display status of jobs

查看当前shell 会话的任务状态及信息

​​jobs​​列出后台进程

help jobsjobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args] Display status of jobs. Lists the active jobs. JOBSPEC restricts output to that job. Without options, the status of all active jobs is displayed. Options: -l lists process IDs in addition to the normal information -n lists only processes that have changed status since the last notification -p lists process IDs only -r restrict output to running jobs -s restrict output to stopped jobs If -x is supplied, COMMAND is run after all job specifications that appear in ARGS have been replaced with the process ID of that job's process group leader. Exit Status: Returns success unless an invalid option is given or an error occurs. If -x is used, returns the exit status of COMMAND.

​​jobs -l​​可以看到PID(进程号)

fg:Move job to the foreground.

将指定job调到前台运行

$ help fgfg: fg [job_spec] Move job to the foreground. Place the job identified by JOB_SPEC in the foreground, making it the current job. - If JOB_SPEC is not present, the shell's notion of the current job is used. Exit Status: Status of command placed in foreground, or failure if an error occurs.

将​​jobs​​​查询到的job代号作为​​fg​​​的参数(带上前缀​​%​​)(最优先推荐的方式)也可以将​​job对应的命令名​​称作为参数

如果想要通过job名称更好的方式是​​%Command​​的方式来唤醒

譬如,我将web (django)服务从后台suspend状态调到其前台(通过​​%py​​)(py是该命令的第一个字段)

# cxxu @ cxxuAli in ~/djangoProjects/ela [19:04:12] C:148$ fg %py[1] + 6859 continued py manage.py runserver 0:8080[06/Apr/2022 11:06:07] "GET /polls/ HTTP/1.1" 200 74[06/Apr/2022 11:06:07] "GET /polls/ HTTP/1.1" 200 74[06/Apr/2022 11:06:11] "GET /polls/ HTTP/1.1" 200 74

& : 有预期的将某个任务挂在后台运行

在命令后面加上​​&​​这种情况下,和使用​​ctrl+z​​​不同,任务挂到后台是处于运行状态(​​running​​​),而不是被​​suspend​​例如

​​sleep 300 &​​​​vim &​​

# cxxu @ cxxuAli in ~/djangoProjects/ela [10:06:43] C:16$ vim &[4] 28951# cxxu @ cxxuAli in ~/djangoProjects/ela [10:09:08]$[4] + 28951 suspended (tty output) vim# cxxu @ cxxuAli in ~/djangoProjects/ela [10:09:08]$ jobs[1] - suspended py manage.py runserver 0:8080[2] suspended (signal) top[3] suspended ping baidu.com[4] + suspended (tty output) vim

# cxxu_kali @ CxxuWin11 in ~ [22:11:02]$ vim file &[1] 4455[1] + 4455 suspended (tty output) vim file# cxxu_kali @ CxxuWin11 in ~ [22:13:59]$ jobs[1] + suspended (tty output) vim file

ctrl+z:挂起当前进程(suspend current process)

当某个进程占据了您的shell,您可以使用​​ctrl+z​​将该进程挂起,转到后台(一般就处于suspended状态)

处于挂起(suspended)的程序其任务不在被cpu执行,当我们用​​fg​​将其调到前台(continued),继续执行

# cxxu_kali @ CxxuWin11 in ~ [21:02:41] C:148$ jobs[1] + suspended sleep 30# cxxu_kali @ CxxuWin11 in ~ [21:02:43]$ bg %1[1] + 3274 continued sleep 30# cxxu_kali @ CxxuWin11 in ~ [21:02:51]$ jobs[1] + running sleep 30

bg:让挂起的后台运行起来

您可以对被挂起的进程(譬如被​​ctrl+z​​​挂起)执行​​bg​​​操作(用​​jobs​​查询到被挂起在后台的进程(譬如查到它的job_id))

# cxxu_kali @ CxxuWin11 in ~ [21:09:20] C:148$ jobs[1] + suspended sleep 130[2] - running sleep 300# cxxu_kali @ CxxuWin11 in ~ [21:09:28] C:1$ bg %1[1] - 3468 continued sleep 130## 查询操作结果.# cxxu_kali @ CxxuWin11 in ~ [21:09:35]$ jobs[1] - running sleep 130[2] + running sleep 300

但是不可以对正在运行的后台任务执行有效的​​bg​​

# cxxu_kali @ CxxuWin11 in ~ [21:09:23]$ bg %2bg: job already in background

Difference Between the bg Command and the “&” sign

As you notice above that the ‘&’ sign can do the job of sending a process to the background too. So what’s the use of the bg command then?

The major difference is that the bg command in Linux can be used on processes that are already running on the foreground. The ‘&’ sign works only when you’re starting the process and cannot be used for processes that are already running.

So for processes that you haven’t started up yet, the bg command and the ‘&’ sign will behave in the same way.

nohup:关闭/退出shell后任然运行

To run a process in the background without getting impacted by the closing of the terminal.nohup sleep 100 &

​​nohup ​​

进程终止

kill家族命令

kill(2), killall(1), nice(1), pkill(1), renice(1), signal(7), skill(1)

references of terminate a process

​​How to force kill process in Linux using kill and killall - nixCraft (cyberciti.biz)​​

kill by pid series

获取进程号

​​ps aux|grep ​​​​pgrep​​/`pidof

kill

根据进程号来杀死(若干)进程

NAME kill - send a signal to a processSYNOPSIS kill [options] [...]DESCRIPTION The default signal for kill is TERM. Use -l or -L to list available signals. Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternatesignals may be specified in three ways: -9, -SIGKILL or -KILL. Negative PID val‐ ues may be used to choose whole process groups; see the PGID column in ps command output. - A PID of -1 is special; (it indicates all processes except the kill process itself and init.)

默认的kill行为(弱杀)

To kill process on Linux use the kill command:kill pidkill -SIGKILL pidkill 27707By default signal 15, named SIGTERM, is sent to kill process. Hence all of the following are doing same things:kill -15 27707kill -SIGTERM 27707kill 27707

结束所有你可以终止的进程

从上述描述中可以看出,​​kill -9 -1​​可以满足需求

强杀(必杀)

How to Kill a Process in Linux using SIGKILLSometime -SIGTERM (-15) fails, the stronger signal 9, called SIGKILL, should be used for force killing of process. For example, the following command would guarantee that process 27707 would be killed:kill -9 27707kill -SIGKILL 27707

查询信号名

​​kill -l​​-l, --list [signal] List signal names. This option has optional argument, which will convert signal number to signal name, or other way round.

# cxxu @ cxxuAli in ~ [17:59:41]$ kill -lHUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM 16 CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL 30 SYS# cxxu @ cxxuAli in ~ [18:04:16]$ kill -l 11SEGV# cxxu @ cxxuAli in ~ [18:04:27]$ kill -l 9KILL

kill by processName series

killall&pkill

Linux force kill process using killall/pkill commands

killall

NAME killall - kill processes by name DESCRIPTION killall sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent. Signals can be specified either by name (e.g. -HUP or -SIGHUP) or by number (e.g. -1) or by option -s.

pkill&pgrep

两者有相同的选项

DESCRIPTION - pgrep looks through the currently running processes and lists the process IDs which match the selection criteria to stdout. All the criteria have to match. For example, $ pgrep -u root sshd will only list the processes called sshd AND owned by root. On the other hand, $ pgrep -u root,daemon will list the processes owned by root OR daemon. pkill will send the specified signal (by default SIGTERM) to each process instead of listing them on stdout.

可以根据进程名字来杀死进程(常见情况)如果某个程序运行了多个实例,可以根据名字一同杀死

If we already know the process we want to kill is named chrome, we can make use of the killall command and send the same signal the process l.Instead of using PID one can kill any process by name using the killall or pkill command. The syntax is:​​killall -9 app​​​​pkill -9 app​​ eg kill chrome ​​killall -9 chrome​​

终止其他用户的进程(root privileges)

You may want to run the ​​killall command​​​ as root user to kill process of all users on Linux:​​​sudo killall -9 nginx​​ It is also possible to kill process with confirmation:# cxxu @ cxxuAli in ~ [18:49:57]$ killall -9 -i vimSignal vim(11341) ? (y/N) y[2] + 11341 killed vim fileOfRoot

The only caveat to the above command is that it may not catch all of the running chrome processes.

上述默认情况并不是发送​​KILL​​强杀,所以某些情况下可能失败(仍然有相关进程运行)​​killall -9 ​​

If, after running the above command, you issue the ps aux|grep chrome command and see remaining processes running, your best bet is to go back to the kill command and send signal 9 to terminate the process by PID.

How to kill only process(es) running as USER(specific user)

killall-u, --user Kill only processes the specified user owns. Command names are optional.

Say you want to kill vim process that in running as vivek user, run:(for examples:)

​​killall -u {userName(UID)} -9 [processName(s)]​​``killall -u cxxu -9 vim`

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[练习](一二维 )前缀和 与 差分
下一篇:营销头条:这支广告,李宗盛几乎写尽了整个人生!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~