[RH124] 8-进程
1.查看系统进程
图形化界面:系统工具(system tools)---->系统监视器(system monitor)
2.进程的概念
PID:Process id,进程ID。进程的唯一标识。
子进程:也是一个独立的进程,当创建子进程的时候,子进程是对父进程的一个完整复制。
信号:父进程要对子进程进行操作,是通过信号来告诉子进程的。
kill -l:查看所有信号。
常用信号:
1.SIGHUP:挂起信号。
2.SIGHINT:平时执行的Ctrl+C。
9.SIGKILL:强制杀死进程。
15.SIGTERM:普通的结束进程,但有时候杀不掉,就要使用9号信号。
例如:
我们打开一个终端,终端会启动一个Shell子进程。
在我们关闭终端时,相应的SHELL子进程也会结束。
3.查看进程
ps:使用该名称查看进程信息。如果不加选项,那么查看的只是当前终端的进程。
ps aux:查看所有进程,UNIX风格。推荐使用,信息更多。a表示所有,u表示显示进程所有者用户,x表示显示运行在终端的进程和所有后台进程,如果不写x,只会显示运行在终端的进程。
ps -ef:同上,Linux风格。
第1列:USER,指进程所属用户。 第2列:PID,进程号。 第3列:%CPU,CPU占用率。 第4列:%MEM,内存占用率。 第5列:VSZ,消耗的线性内存。 第6列:RSS,消耗的真实的物理内存。 第7列:TTY,属于哪个终端,如果是"?",表示后台进程。 第8列:STAT,进程的状态。如下图:
第9列:START,进程启动时间。
第10列:TIME,进程运行了多少时间。
第11列:COMMAND,使用什么命令运行的该进程,或者是由什么引起的该进程。
自定义需要查看的列:
ps -ex -o user,pid,%cpu,%mem :自定义查看所属用户、pid、CPU占用率、内存占用率。
查看一个进程运行在哪个CPU上:
cat /dev/zero > /dev/null :/dev/zero是取之不尽的,写到/dev/null黑洞,形成一个死循环。
ps mo pid,psr `pgrep cat` :查看cat进程运行在哪个CPU。
小技巧:
ps aux | grep -v grep | grep bash :从进程中过滤出bash进程,但是会默认过滤出grep进程,我们使用grep -v grep将grep进程反向过滤掉。
查询某个进程的PID:
pgrep cat :查询包含"cat"字符进程的PID。匹配cat字符。
pidof cat :查询cat进程的PID。完全匹配cat。
杀死进程:
kill -9 pid : kill -9 `pgrep cat` 或 kill -9 `pidof cat` 。
killall -9 cat :通过名字杀死进程。
pkill:
当某个用户正在登录状态,我们想使用userdel删除该用户,会提示用户正在登录,无法删除。
此时,我们可以使用pkill来把该用户踢出登录。
1) w | grep bob :查看bob状态,假设在终端tty2上登录。
2) pkill -kill -t tty2 :把终端tty2杀死,就是把在tty2上的bob用户踢掉线。
3) userdel -r bob :删除bob用户和相关目录文件。
4) id bob :查询bob,已经不存在了。
查看进程树状关系图:
pstree:
4.后台运行(&符号)
前台:终端会被占用。
后台:终端不会被阻塞。使用jobs查看后台程序。
前台切到后台:
前台运行程序时,终端被占用,但是我们想执行其他命令:
1.使用Ctrl+z,可以把前台程序切换到后台运行,但默认会是停止的。
2.使用jobs,查看后台的程序:
3.使用"bg 编号"将停止的进程在后台运行起来。
后台切到前台:
1.使用jobs查看后台进程编号。
2.使用"fg 编号"来把后台程序切换到前台,切换后终端会被占用。
直接在后台运行程序:
在运行命令的最后加上"&"符号,程序就会在后台运行了。
如果程序出现一切静态、日志类的东西,不用关心,直接回车就可以了。例如:
杀死后台程序:
1.先使用jobs查看后台进程编号。
2.使用 kill -9 %编号 杀死进程。千万注意,%1和1是不一样的,前者是后台程序的编号,后者是PID。
(注:PID=1的进程是所有进程的父进程, 在RHEL7中叫systemd,在RHEL6中叫init 。)
5.nohup
问题:默认情况下,我们在终端里运行的程序(无论是前台还是后台),都属于该终端的子进程。
这样的话,我们如果关闭该终端,这些子进程都会被结束。
目的:如果我们使用远程连接(CRT或XSHELL等工具),需要执行一个时间比较长的程序,而我们又不想等待。那么,我们可以使用nohup。
如何使用: nohup firefox & 。默认会把程序的输出放到 nohup.out (运行命令时所在目录中)中,我们可以重定向该日志输出文件。例如 nohup firefox & > output.log 。
在不使用nohup时,用pstree查看:
|-gnome-terminal--+-bash---su---bash-+-firefox---45*[{firefox}]
使用nohup时:
|-firefox-+-Web Content---19*[{Web Content}] | `-43*[{firefox}]
这样firefox就不属于任何终端了。
6.动态查看进程
top命令
top命令默认3s刷新一次。
top -d 1 :设置1s刷新一次。
按数字1:可以显示多个CPU的信息。
===