linux学习-ps进程管理

出自:https://blog.csdn.net/wangb_java/article/details/79179478

查看进程

ps:查看进程。这里看到的只有当前环境的进程,还有其他环境和后台进程并没有显示。结果第一行是标题:


PID:是进程id,由系统分配,非常重要。有些命令必要通过这个id找到这个进程,才能进行下一步操作。

TTY:进程的执行终端,下面会讲。

TIME:该进程总共占用cpu的时间,如果该进程运行时什么事也没做,没有占用cpu,也就不算时间。

CMD:进程启动命令。

bash:在登录putty时,默认会执行一个bash命令,开启bash程序,即命令行,可以在此输入各种命令,这个bash本生就是一个进程。

ps:这就是我执行的ps命令,它会开启一个进程来执行命令,执行完后,这个进程马上就会结束。

当我再次执行ps命令时,ps的PID变成了下图的1358,这又是一个新的进程,而上图中的那个1356进程已经在一瞬间结束了。而bash的PID始终是1339,因为我们并没有关闭命令行,所以这个进程一直存在。执行exit命令可以退出当前bash。


终端与虚拟终端

终端:在早期计算机价格昂贵的年代,一台主机可以有多台终端机,供多人同时使用。每台终端机只需要有输入输出设备,如键盘和显示器。输入命令发送到主机执行,返回结果到显示器显示。

虚拟终端:在人手一台主机的年代,可以在主机上运行软件来模拟终端,比如putty,这样的终端称为虚拟终端。

ps -e|grep bash:-e是查看所有进程,包含后台进程,并且用grep过滤只查看bash,看看现在有多少人登录到了bash。


使用了grep就不会显示标题了,现在看第二列即TTY列。

tty1:终端1,在虚拟机中输入用户名密码登录,就打开了终端1。在虚拟机中按ctrl+alt+F2,会切换到终端2,即tty2。默认有六个,F1-F6。

pts/3:虚拟终端/3,从前面的图可以看出我现在正在pts/3,即第四个虚拟终端上操作。我现在只开了这一个putty,那么0-2是又是什么?然道是黑客?并不是。。而是我之前开过的三个putty,由于非正常关闭的原因,导致它们现在仍然存在,成了僵尸程序。重启服务器可以结束它们,但是线上服务器怎么可能随意重启?

kill结束进程

kill -15 PID:正常结束进程。
kill -9 PID:强行结束进程。
这两种有什么区别?比如某个程序正在运行中,可能会产生一些临时文件,按正常结束流程,会先删除这些文件再结束。而强行结束,只管将程序杀死,其它什么也不管,相当于拔电源强行关机。平时优先使用-15正常结束,只有在无法正常结束,而且没有其他结束方法的时候才会使用-9。
kill -15 1076:虚拟终端pts/0的bash的PID是1076,可是无法正常结束它,之后用-9强行结束了。为什么这个进程无法正常结束?继续往下看。

父进程、子进程、fork

ps -f:-f是显示更多完整的信息。现在多了几列,这里只讨论PPID:即parent PID父进程。ps的父进程1437正是bash的PID。

在bash中执行ps命令时,bash即父进程会复制一个子进程,并继承父进程的环境,最终由子进程来执行ps。这种复制方式就是fork,在以后讲服务的时候需要配置fork,并理解父子进程,所以这里提前说一下。


那么bash的父进程1433又是什么?它不属于当前终端的进程,仅ps命令查不到,如果要查看所有进程,可以使用-e选项。

ps -ef|grep 1433:在所有进程中查找1433,并且使用-f格式。

注意:这是最常用的搜索进程命令,比如要查找tomcat进程是否启动成功,是否正在运行,可以执行ps -ef|grep tomcat。


结果第一行就是1433,它的终端是?,这是因为在服务器启动时,会自动开启一些后台服务,这些进程是与终端无关的。而sshd: root@pts/3又是什么?如果继续往上找994,会发现994是sshd进程,就是ssh的守护进程,即开机自启的ssh服务,下篇会讲。那么sshd: root@pts/3就是ssdh的子进程,也就是每开一个putty终端,sshd都会开一个对应的子进程。然后通过ssdh的子进程来打开我们putty中的bash。所以上面在执行kill -15 1076结束pts/0的bash的时候,由于其绑定的父进程sshd: root@pts/0一直存在,所以这样正常结束子进程是无效的。


现在我们用kill -15 1433结束当前bash的父进程sshd: root@pts/3,如下图,putty被断掉。因为子进程bash也被一起杀掉了,这就是有效的。你再重新开一个putty去搜索子进程的PID是搜不到的。 


注意:

1.有的进程并没有与其绑定的父进程,那就可以直接正常结束了。比如你装个tomcat运行,会发现他的PPID是1,这种顶级数字的进程显然不是。

2.kill -15杀不掉还会有其他原因,比如程序文件等已经被破坏,这就不是父进程的问题了。


猜你喜欢

转载自blog.csdn.net/kangkang_hacker/article/details/80716287