Linux—进程管理—who、ps、jobs、fg、bg、kill、env

进程管理

1. who

  查看当前在线上的用户情况。所有的选项都是可选的,不使用任何选项时,who 命令将显示以下三项内容:

  login name:登录用户名;
  terminal line:使用终端设备(就是使用 Ctrl+Alt+T 打开的窗口叫做终端,打开的终端越多,显示的终端设备越多);
  login time:登录到系统的时间。

name@ubuntu:~/demo$ who -uH
名称		 线路	时间				   空闲	    进程号 备注
(用户名)  tty2 	2020-08-14 13:31 	. 		6798
(用户名)  tty7	2020-08-14 01:31 	旧		2423
(用户名)  pts/1	2020-08-14 01:31   12:00 	2843  (:0)
(用户名)  pts/3	2020-08-14 10:39 	. 		2843  (:0)

  Linux / Unix 下默认将 tty1 ~ tty6 分配给了字符终端(黑窗口,没有鼠标控制的字符界面)。打开字符终端的快捷键为:Ctrl+Alt+(F1 ~ F6)F1 ~ F6 分别对应 tty1 ~ tty6。打开窗口之后要先输入用户名,再输入密码,输入密码时,界面上是不会显示的,登录成功之后,才能进行其他操作。

  tty7 给图形界面终端预留的,也就是我们平时使用的那个界面,快捷键为:Ctrl+Alt+F7

2. ps

ps [选项] (用来查看进程的相关信息)

  ps 命令用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用 ps 命令了。选项部分如下:

-e 		显示所有进程。
-f		全格式。
-h		不显示标题。
-l		长格式。
-w 		宽输出。显示加宽可以显示较多的资讯。
a 		显示终端上的所有进程,包括其他用户的进程。
r		只显示正在运行的进程。
x		显示没有控制终端的进程。
-au 	显示较详细的资讯
-aux	显示所有包含其他使用者的行程(常用的参数组合)
-a  	显示所有终端机下执行的进程,除了阶段作业领导者之外。
a  		显示现行终端机下的所有进程,包括其他用户的进程。
-A  	显示所有进程。
-c  	显示 CLS 和 PRI 栏位。
c  		列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
-C		<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
-d  	显示所有进程,但不包括阶段作业领导者的进程。
-e  	此参数的效果和指定"A"参数相同。
e  	列出进程时,显示每个进程所使用的环境变量。
-f  	显示 UID,PPIP,C 与 STIME 栏位。
f  	用 ASCII 字符显示树状结构,表达进程间的相互关系。
-g		<群组名称>  此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
g  	显示现行终端机下的所有进程,包括群组领导者的进程。
-G		<群组识别码>  列出属于该群组的进程的状况,也可使用群组名称来指定。
h  	不显示标题列。
-H  	显示树状结构,表示进程间的相互关系。
-j或j  采用工作控制的格式显示进程状况。
-l或l  采用详细的格式来显示进程状况。
L  	列出栏位的相关信息。
-m或m  显示所有的执行绪。
n  	以数字来表示 USER 和 WCHAN 栏位。
-N  	显示所有的进程,除了执行 ps 指令终端机下的进程之外。
-p<进程识别码>  指定进程识别码,并列出该进程的状况。
p<进程识别码>   此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
r  	只列出现行终端机正在执行中的进程。
-s<阶段作业>  指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
s  采用进程信号的格式显示进程状况。
S  列出进程时,包括已中断的子进程资料。
-t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
t<终端机编号>  此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
-T  	显示现行终端机下的所有进程。
-u<用户识别码>  此参数的效果和指定"-U"参数相同。
u  	以用户为主的格式来显示进程状况。
-U<用户识别码>  	列出属于该用户的进程的状况,也可使用用户名称来指定。
U<用户名称>  	列出属于该用户的进程的状况。
v  	采用虚拟内存的格式显示进程状况。
-V或V  显示版本信息。
-w或w  采用宽阔的格式来显示进程状况。 
x  	显示所有进程,不以终端机来区分。
X  	采用旧式的 Linux i386 登陆格式显示进程状况。
-y 		配合参数"-l"使用时,不显示 F(flag) 栏位,并以 RS S栏位取代 ADDR 栏位。

  常用组合

ps -ef
ps aux 或 ps -aux
ps auxc 或 ps -auxc
ps axjf 或 ps -axjf
ps axjfc 或 ps -axjfc

  这个命令参数有很多,但一般的用户只需掌握一些最常用的命令参数就可以了。最常用的三个参数是 uax, 我们首先以 root 身份登录系统,查看当前进程状况。

username@ubuntu:~$ ps aux
USER 	PID	 %CPU  %MEM  VSZ  RSS  TTY  STAT START  TIME  COMMAND
root 	1 	 0.0   0.0   3672 2008 ?    Ss   08:46  0:01  /sbin/init
username@ubuntu:~$ ps ajx
PPID 	PID	  PGID   SID   TTY     TPGID  STAT  UID   TIME   COMMAND
4592 	6948  6948   4592  pts/3   6948   R+    1000  0:00   ps ajx

username@ubuntu:~$ ps -Lf 2423
UID    PID    PPID   LWP 	C 	NLWP   STIME  TTY   STAT   TIME   CMD
1000   2423   2282   2423   0   4      08:46  ? 	Ssl    0:00   gnome-session --session=ubuntu
1000   2423   2282   2465   0   4 	   08:46  ? 	Ssl    0:00   gnome-session --session=ubuntu
1000   2423   2282   2466   0   4      08:46  ? 	Ssl    0:00   gnome-session --session=ubuntu
1000   2423   2282   2468   0   4      08:46  ? 	Ssl    0:00   gnome-session --session=ubuntu

  Head 标头:

USER 	用户名
UID 	用户 ID(User ID)
PID 	进程 ID(Process ID)
PPID 	父进程的进程 ID(Parent Process id)
SID 	会话 ID(Session id)
%CPU 	进程的 cpu 占用率
%MEM 	进程的内存占用率
VSZ 	进程所使用的虚存的大小(Virtual Size)
RSS 	进程使用的驻留集大小或者是实际内存的大小,Kbytes 字节。
TTY 	与进程关联的终端(tty)
STAT 	进程的状态:进程状态使用字符表示的(STAT的状态码)
R 		运行 Runnable (on run queue)		正在运行或在运行队列中等待。
S 		睡眠 Sleeping		休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 		空闲 Idle
Z 		僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 		不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 		停止 Terminate 进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行运行。
P 		等待交换页
W 		无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 		死掉的进程
< 		高优先级进程高优先序的进程
N 		低优先级进程低优先序的进程
L 		内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 		进程的领导者(在它之下有子进程);
l 		多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 		位于后台的进程组
START 	进程启动时间和日期
TIME 	进程使用的总 cpu 时间
COMMAND 正在执行的命令行命令
NI 		优先级(Nice)
PRI 	进程优先级编号(Priority)
WCHAN 	进程正在睡眠的内核函数名称;该函数的名称是从 /root/system.map 文件中获得的。
FLAGS 	与进程相关的数字标识

3. jobs

  用来显示当前 shell 下正在运行哪些作业(即后台作业)。( Ctrl-z 是使当前进程停止或者暂停,Ctrl-c 是使当前进程终止)

$ cat

  (按下 Ctrl-z 挂起当前进程)

[1]+ Stopped 	cat
$ cat

  (按下 Ctrl-z 挂起当前进程)

[2]+ Stopped 	cat
$ jobs
[1]- Stopped 	cat
[2]+ Stopped 	cat

  第一列方括号中的数字表示作业序号,它是由当前运行的 shell 分配的,而不是由操作系统统一分配的。在当前 shell 环境下,第一后台作业的作业号为 1,第二作业的作业号为 2,等等。
  第二列中的 “+” 号表示相应作业的优先级比 “-” 号对应作业的优先级高。
  第三列表明作业状态,是否为运行、中断、等待输入或停止等。最后列出的是创建当前这个作业所对应的命令行。

4. fg

fg [job…]

  把指定的后台作业或挂起作业移到前台运行。参数 job 是一个或多个进程的 PID,或者是命令名称,或者是作业号(作业号前面要带一个 % 号)。

  通常在 shell 中输入命令启动进程后,如果该进程需要与用户交互,那么此后用户的键盘输入都被该进程读取,直到该进程退出后才出现 shell 提示符 $,这种进程为前台进程。

  如果在命令行的末尾加上 & 字符,则 shell 为这个命令创建一个后台进程,它虽然也可以输出到屏幕,但是不能读取键盘输入,不管执行命令的进程有没有退出都立刻回到 shell 提示符接受下一条命令的输入。如果该进程也需要读取键盘输入,则被挂起等待直到用户用 fg 命令把它变成前台进程。如果一个命令需要较长的处理时间并且不需要与用户交互,就适合把它放在后台执行。

  ㊨ 注释:shell 中有前台和后台之分,同一时刻只能有一个进程/一个进程组/一组作业在前台,剩下的进程都在后台。

$ ./app(程序名) &  (添加了参数 & 后, 作用是将启动的程序 app 直接放在后台运行)

5. bg

bg [job…]

  把被挂起的进程唤醒提到后台执行。其中,job 是一个或多个进程的 PID、命令名称或者作业号,在参数前要带 % 号。

$ cat
(按下Ctrl-z挂起当前进程)
[1]+ Stopped cat
$ bg %1
[1]+ cat &
$(再回车一次)
[1]+ Stopped cat
$ fg %1
cat
(按Ctrl-d输入文件结束符)
$

6. kill

  向指定进程发送信号(只不过发送的大部分信号会终止或杀死指定的进程)

kill [ -signal | -s signal ] pid ...

  查看信号编号-l

kill -l [ signal ]

  ㊨ 注释:一共有 64 个信号编号,前 32 个信号属于 Unix 经典信号,也就是说 Unix 下都有这 32 个信号,一般开发都是用前 32 个信号;后面 32 个信号属于实时信号,跟硬件和开发驱动相关的信号,做底层驱动的时候才会用到,后面 32 个信号可以叫做用户实时自定义信号

  常用的信号有:
  2) SIGINT :在使用 Ctrl+C 的时候就会产生这个信号,用来终止进程。
  9) SIGKILL :杀死进程,向任意进程发送这个信号就该进程一定会被杀死。
  11) SIGSEGV :段错误,一般对内存进行非法操作的时候,会向进程发送这个信号。
  19) SIGSTOP :暂停信号。Ctrl+Z
  18) SIGCONT :继续信号。

  给一个进程发信号,或终止一个进程的运行。

$ cat
(按Ctrl-z挂起当前进程)
[1]+ Stopped cat
$ ps
PID TTY TIME CMD
5819 pts/1 00:00:00 bash
5893 pts/1 00:00:00 cat
5894 pts/1 00:00:00 ps
$ kill -SIGKILL 5893
$(再次按回车键)
[1]+ Killed(已杀死) cat 
$

  kill 命令如果不带参数而直接跟 pid,就是发给该进程 SIGTERM 信号,大部分进程收到该信号就会终止。但是被挂起的进程不能处理信号,所以必须发 SIGKILL 信号,由系统强制终止进程。

7. env

  查看当前进程环境变量(环境变量是指当前运行的一个程序(进程)的环境,比如当前目录,用户的家目录,使用的 shell 版本等等)

$ env

  █  vim ~/.bashrc   配置当前用户环境变量
  █  vim /etc/profile   配置系统环境变量,配置时需要有 root 权限

export PATH=$PATH:新路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值