Ubantu进程管理

文章讲述了Linux系统中进程的创建与查看,重点介绍了如何使用ps命令来查看进程信息。进程可以分为前台和后台,前台进程与用户交互,后台进程则在后台运行。使用nohup命令可以使进程在终端关闭后继续运行。进程的终止包括自行终止、异常退出和被kill命令强制结束。kill-9用于强制杀死指定PID的进程,但需要相应权限。
摘要由CSDN通过智能技术生成

进程的创建与查看

Linux中,一个进程A里面可以创建出一个新的进程B,进程A就叫做进程B的 父进程 (parent process)。

进程B叫做进程A的子进程(child process)。

最典型的例子,我们在shell中运行的程序(命令),都是shell进程创建的,所以shell进程就是他们的父进程。

Linux中,主要是通过ps命令来查看进程信息的,我们运行命令ps -f ,结果如下所示

其中 PPID这一列就是该进程的父进程的PID。

 

我们可以看出 ps 命令对应的进程的父进程PID为4786,正是bash进程的PID。

下面列举了常用的 ps命令 的例子:

ps 显示和当前终端有关的进程信息

ps -u byhy 显示byhy用户所创建的进程信息

ps -f 详细显示每个进程信息

ps -e 显示所有正在运行的进程信息

ps -ef 显示当前系统所有的进程

ps –ef | grep python 查找python进程

进程的前台、后台转换

Linux终端通过Shell程序来接收用户输入的命令,并且执行命令。

我们在Shell里正在执行的,和用户进行人机交互的进程叫 前台进程 (foreground process)

前台进程可以接收键盘输入并将结果显示在显示器上。

用户敲入什么命令,shell就会启动对应的程序,运行在 前台 。

比如,大家可以用vi 编写一个 下面的Python程序到 Linux主机上,代码文件名可以为t1.py

while True:    
    info = input("please input something:")
    print("you input:%s\n\n" % info)

然后使用命令 python3 t1.py 运行。

可以发现及时这个 python 程序变成了前台进程,接收用户的输入。

有些程序运行时,并不需要和用户进行交互,也就是说,不需要用户输入什么内容。 比如一个日志分析程序,一个定时清理磁盘文件的程序。

比如,下面这样的一个Python程序 t2.py:

import time

while True:    
    print("execute a task ...")
    time.sleep(2)
    print("done, wait for an hour to proceed...")
    time.sleep(3600)

我们可以执行命令 python3 t2.py 运行它

这样的程序,运行期间,如果在前台执行,我们只能等待它结束,不然我们没法执行下个程序。

但是既然不需要用户输入信息,在前台执行,没有太大意义,我们应该要让它在 后台 执行。

要让它在后台运行,启动时只需在命令行的最后加上“&”符号。

比如 python3 t2.py &

后台运行的进程我们叫后台进程(background process),或者后台任务 ,它不直接和用户进行交互的进程。用户一般是感觉不到后台进程程序的运行。

当在后台运行命令时,有时需要其输出重定向输出到一个文件中去,以便以后检查。

比如 在后台运行find命令,在当前目录及其子目路下查找文件名为 byhy 的文件。

$ find . -name byhy -print > log.txt &
4762

重定向的概念后面会讲。

nohup

我们可以执行命令的时候,使用 & 结尾使进程在后台运行。

但是如果终端关闭,那么程序也会被关闭,因为shell会发送SIGHUP信号给这些进程。进程接收的该信号,如果没有特别的处理,缺省就会结束运行

为了避免这种情况,那么我们就可以使用 nohup 这个命令。

比如我们有个test.sh 需要在后台运行,并且希望在后台能够一直运行,即使关闭了终端,也不退出。那么就使用nohup:

nohup /root/test.sh &

进程的终止

进程一般有两种终止方式。

  • 自行终止

有的进程执行完一段任务后,就自行退出了。

比如上面的ps命令,它执行完查看进程信息的任务后,就会结束。

也有的不是自动退出,而是用户操作它,让它退出。 比如 我们在Shell进程中运行exit命令后,该Shell进程就会退出。

也有的是异常退出,比如程序有个bug(比如代码里面有除以0的指令),该程序无法执行下去,也会终止。

  • 被强行杀死

有的进程一直不结束,如果用户觉得该进程应该被强行结束了,该怎么办呢?

对于一个前台进程,要结束它,我们只需要按组合键: Ctrl + C 。

对于一个后台运行的进程 ,如果用户觉得该进程应该被强行结束,可以使用 kill -9 命令强行杀死该进程。

比如上面的 python3 t2.py 命令运行的进程。 我们可以先用ps命令查出它的进程PID,

byhy@byhy-server:~$ ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
byhy        2368    2367  0 08:38 pts/0    00:00:00 -bash
byhy        2386    2368  0 08:39 pts/0    00:00:00 python3 t1.py
byhy        2388    2368  0 08:39 pts/0    00:00:00 ps -f

如上所示的python进程PID为2386,我们再执行命令 kill -9 2386 。 这样就强行停止了该进程。

要注意的是, 上面所示的进程启动它的用户为byhy,那么只能是用户byhy或者root用户才能杀死该进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值