首页 > 系统相关 > 进程管理4以及信号控制进程

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

时间:2023-09-16 22:31:49浏览次数:32  
标签:控制 命令 任务 kill 信号 进程 终止

一:Linux系统中的job和process

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

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

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

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

.

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

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

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

命令

说明

jobs

显示后台任务和暂停任务

bg %num

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

fg %num

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

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

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

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

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

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

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

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

二:信号控制进程

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

                                              进程管理4以及信号控制进程_bc_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以及信号控制进程_bc_06

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

                                              进程管理4以及信号控制进程_Shell_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以及信号控制进程_Shell_08

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

三:Shell脚本与任务总结

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


标签:控制,命令,任务,kill,信号,进程,终止
From: https://blog.51cto.com/u_15912723/7496793

相关文章

  • springboot+html使用sql语句能够在控制台输出相关数据信息list,但是输出的list=null(未
    问题描述具体来说,就是,连接上数据库之后,发现查询的sql语句能够正常在控制台输出数据,但是将sql语句的查询结果放到list里面,在控制台输出的list=[null];真的崩溃了!!!之前从来没有遇到过这种情况;尝试了网上的各种方法,也都解决不了,麻木ing~求解!......
  • 5.进程线程模型你知道多少?
    5.进程线程模型你知道多少?1.进程进程创建与结束背景知识:进程有两种创建方式,一种是操作系统创建的一种是父进程创建的。从计算机启动到终端执行程序的过程为:0号进程->1号内核进程->1号用户进程(init进程)->getty进程->shell进程->命令行执行进程。所以......
  • linux下shell流程控制实例
    linuxshell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case)。下面我将通过例子介绍下,各个语句使用方法。一、shell条件语句(if用法)if语句结构[if/then/elif/else/fi]if条件测试语句thenaction[elif条件actionelseaction]fi如果对于:条件测试语......
  • 4- 信号量& 互斥量
    信号量,计数值问题: 还是那个AB任务互斥调度的问题,B等A执行完毕的过程中,判断标志位会耗费CPU资源利用信号量,当没有信号的时候,不参与调度计数信号量(不能用来传输数据)staticSemaphoreData_txSemCalc;Xsemcalc=xSemaphoreCreateCounting(10,0);//最大值,初始值 计算完成后信......
  • Arduino[入门]舵机的声源定位方向控制测试
      测试视频请点击收看 利用声源定位板让舵机可以根据声源位置定位来控制舵板的方向.因为声源定位板本身已经给出了6个方位高电平的脚位.所以只需要我们在Arduino内调用舵机的程序库.然后各自赋予每个相应角度的各种的舵机角度值就可以做到.声源定位板介绍: 声源定位核心板上......
  • 格式控制符
    格式控制符是用于指定printf、scanf、fprintf、fscanf等C标准库函数中的格式化输入和输出的特殊字符序列。这些字符序列定义了如何解释要输出或输入的数据。以下是一些常用的格式控制符:%d:用于输出或输入十进制整数。%f:用于输出或输入浮点数。%c:用于输出或输入......
  • sql访问控制
           ......
  • springmvc中异常配置的两种方式,一种使用注解配置,一种使用控制器配置
    2023-09-16方式一springmvc.xml<!--配置异常处理器--><beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><propertyname="exceptionMappings"><props>......
  • TCP的滑动窗口与拥塞控制
    客户端每发送的一个包,服务器端都应该有个回复,如果服务器端超过一定的时间没有回复,客户端就会重新发送这个包,直到有回复。为了保证顺序性,每一个包都有一个ID。在建立连接的时候,会商定起始的ID是什么,然后按照ID一个个发送。为了保证不丢包,对于发送的包都要进行应答,但是这个应答......
  • APC进程注入C++示例和检测思考
    直接贴C++代码效果:apc注入到pid为39712的进程procexp可以看到注入的DLL! 好了,我们看看代码如何写:注入部分//inject3.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。#include<iostream>#include<Windows.h>#include<TlHelp32.h>usingnamespacestd;......