进程管理4以及信号控制进程
  kIM7GUNpnV3x 2023年11月02日 27 0

一:Linux系统中的job和process

这个job就是系统中的任务,系统会管理每个Shell并分配一个job number(任务号码),如果你子啊一个命令行上执行了多个命令,系统会将整个过程看作一项任务。一个进程可以作为一项任务,多个进程也可以作为一项任务。

任务也分前台任务和后台任务,前台任务会与键盘和终端屏幕交互并占用键盘和终端屏幕,直到任务完成,后台任务不能接收键盘输入,根据设置可能会抑制输出到屏幕的任务,可以同时执行多个任务。

在终端输入gnome-calculator启动计算器把它作为前台任务执行,运行这个命令后会弹出计算机界面,用户可以在此界面进行计算的相关操作。在命令后面加上&表示把这个任务放到后台执行,显示的两个数字分别是任务的任务号码和进程号,演示如下图所示:

                                              进程管理4以及信号控制进程_bc

.

                                              进程管理4以及信号控制进程_bc_02

  上面这个是前台运行,而后面这个是后台运行。

管理任务的主要命令,如下表所示:

命令

说明

jobs

显示后台任务和暂停任务

bg %num

通过指定任务号码将指定的任务移动到前台

fg %num

通过指定任务号码将指定的任务移动到前台

如果在执行命令之后你想暂停,可以使用CRTL + c组合键进行退出。

先来演示一个jobs命令:这个是处于后台运行中的任务。

                                              进程管理4以及信号控制进程_Shell_03

再来演示以下bg %2,和fg %2,看一下效果是怎么样的:

                                              进程管理4以及信号控制进程_bc_04

fg命令是将这个任务从后台切换到前台,bg这个命令是将任务从前台切换到后台运行。

如果在Shell中启动一个特定的程序,就可以使用命令指定任务名称来切换任务的前后台状态。如果在Shell中多次启动同一个程序,再使用指定任务的方式就会出错,这个时候必须指定任务号码。

二:信号控制进程

在Linux中通过信号(Signal)控制进程,信号就是可以传送给进程的消息,通过中断通知进程执行特定的操作。通常进程任务完成任务后会自动消失,但是可以通过键盘操作或执行命令将信号发送放到正在进行的进程,如下图所示:

                                              进程管理4以及信号控制进程_Shell_05

信号由编号名称来标识,主要信号如下表所示:

信号编号

信号名称

说明

1

SIGHUP

通过终止终端断开进程

2

SIGINT

中断进程(使用ctrl + c)

9

SIGKILL

杀死进程,即强制终止进程

15

SIGTERM

结束进程(默认)

18

SIGCONT

恢复暂停的进程

将信号发送给一个或者多个进程,可以使用kill命令,kill命令可以终止用户所属的进程,root用户可以使用kill命令终止所有的进程。当未指定特定信号执行kill命令时,将默认的发送SIGTERM(信号编号15),这个信号会使进程结束终止。9这个信号通常用来强制删除一个不正常的进程.kill命令的用法有很多,和信号搭配可以管理系统中的任务和进程,要想使用,就必须熟悉这几个信号的含义。

kill命令的-l选项可以列出当前kill可以使用的信号。演示如下图所示

                                              进程管理4以及信号控制进程_Shell_06

开启两个终端,在终端1执行bc命令开启bc进程,然后在终端2中杀死这个进程。这时终端1接收到了信号会强制终止bc进程,进入终端1会显示这个进程已经杀死。

                                              进程管理4以及信号控制进程_后台运行_07

在上面,使用ps -eo pid,comm | grep bc命令可以查看bc的PID,在使用kill命令的SIGKILL信号杀死这个进程。

默认信号(SIGTERM)在终止程序之前会为每个应用程序执行必要的终止处理,然后自行终止该进程,例如释放资源空间和删除锁定文件。如果SIGTERM没有终止该进程,则在必要的情况下会使用SIGKILL强制中止。如果将SIGKILL发送到进程中,它将不在接受信号的情况下被内核杀死,因此将不在进行任何清理操作。

通过指定进程名称,可以使用killall命令发送信号,即使多次执行同一程序,系统也会成为每一个进程分配不同的PID。当用户想终止具有相同名称的多个进程时,可以使用killall命令:

格式:killall [选项] [信号名称 | 信号编号] 进程名称

在终止进程之前,先弄清楚进程的PID,ps和pgrep命令都可以检查进程的PID。然后执行killal -9 bc命令就可以终止两个运行的bc进程,演示如下图所示:

                                              进程管理4以及信号控制进程_bc_08

kill是一个很实用的命令,在指定任务号码和进程号码之时有所区别。指定任务号码需要使用%+这种方式,默认后面指定的是进程号。

三:Shell脚本与任务总结

                                              进程管理4以及信号控制进程_Shell_09


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  uvM09mQNI0hF   2023年11月19日   32   0   0 sedshell字符串
  48fXx4UfWSFg   2023年12月06日   58   0   0 bcIPbundle
kIM7GUNpnV3x