精华内容
下载资源
问答
  • 1. ps是什么?要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前...ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。基本参数:-A :所有的进程均显示出来...

    1. ps是什么?

    要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。

    ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

    基本参数:

    • -A :
      所有的进程均显示出来,与 -e 具有同样的效用;
    • -a :
      显示现行终端机下的所有进程,包括其他用户的进程;
    • -u :
      以用户为主的进程状态 ;
    • x :
      通常与 a 这个参数一起使用,可列出较完整信息。

    输出格式规划:

    • l :
      较长、较详细的将该PID 的的信息列出;
    • j :
      工作的格式 (jobs format)
    • -f :
      做一个更为完整的输出。

    下面我们就来一个命令进行实践,看看不同的参数都有些什么效果。

    2. 不加参数执行ps命令会输出什么?

    这是一个基本的 ps 使用,我们来看看控制台中执行这个命令并查看结果。

    526e7b16a7ae63ed64f9ca3e8f04abb2.png

    结果默认会显示4列信息:

    • PID: 运行着的命令(CMD)的进程编号
    • TTY: 命令所运行的位置(终端)
    • TIME: 运行着的该命令所占用的CPU处理时间
    • CMD: 该进程所运行的命令

    这些信息在显示时未排序。

    3. 如何显示所有当前进程?

    使用 -a 参数,-a 代表 all。同时加上x参数会显示没有控制终端的进程。

    $ ps -ax# 这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。$ ps -ax | less

    d5075300d177a772f7b678045f84a40c.png

    4. 如何根据进程的用户进行信息过滤呢?

    在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:

    $ ps -u pungki

    cc759d9737b11c880606b366d32e4b0b.png

    5. 如何通过cpu和内存使用来过滤进程?

    也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

    $ ps -aux | less

    294e9d05fd4efd5d12d307ed04b7dc64.png

    当结果很长时,我们可以使用管道和less命令来筛选。

    默认的结果集是未排好序的。可以通过 --sort命令来排序。

    5.1 根据CPU使用率来升序排序

    $ ps -aux --sort -pcpu | less
    

    4dd5eb4bb405d2d0d16fb7a67fa7dcab.png

    5.2 根据内存使用率来升序排序

    $ ps -aux --sort -pmem | less

    878a77afb28eaea47ca7fd3483eb24ea.png

    5.3 我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

    $ ps -aux --sort -pcpu,+pmem | head -n 10

    6. 如何通过进程名和PID进行过滤呢?

    使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

    $ ps -C getty
    

    0d787b5528e866d73bcaa609ee9eba53.png

    如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

    $ ps -f -C getty

    a534c2ff17f1a5472962de315322586e.png

    7. 如何根据线程来过滤进程呢?

    如果我们想知道特定进程的线程,可以使用 -L 参数,后面加上特定的PID。

    $ ps -L 1213

    85cb8d94cf893534bc79efd52871d522.png

    8. 如何树形的显示进程?

    有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

    $ ps -axjf

    8fdfe9c5483584c25d222edfa9dd1708.png

    或者可以使用另一个命令。

    $ pstree

    8ce8a7d593b04e49ef1d6835707af71e.png

    9. 如何显示安全信息?

    如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

    $ ps -eo pid,user,args参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

    080ca2876642ce2b74cad1b5d99053fe.png

    能够与 -e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。

    10. 如何格式化输出root用户(真实的或有效的UID)创建的进程?

    系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

    $ ps -U root -u root u

    -U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

    -u 参数用来筛选有效用户ID(EUID)。

    最后的 u 参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。

    这里有上面的命令的输出结果:

    b0a8b72b9dc7fbdab005f1a805ff3034.png

    11. 如何使用PS实时监控进程状态?

    ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

    当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

    $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

    59b528166227421349eee98572ddb827.png

    如果输出太长,我们也可以限制它,比如前20条,我们可以使用 head 命令来做到。

    $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’
    

    24d3d3c4337a2a2186f4dfe692e58005.png

    这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

    举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:

    $ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’

    44e303f64f4e963f7ea846c68628e706.png

    12. 最后

    你也许每天都会使用ps命令来监控你的Linux系统。但是事实上,你可以通过ps命令的参数来生成各种你需要的报表。

    ps命令的另一个优势是ps是各种 Linux系统都默认安装的,因此你只要用就行了。不要忘了通过 man ps来查看更多的参数。

    来源:http://juejin.im/post/5bf9213ce51d452237153c5c

    展开全文
  • 因为程序运行是走走停停,为有效描述程序在内存中运行状态(例如当前是否处于运行状态还是就绪状态、阻塞状态,占用了哪些系统资源等)。 简单说就是便于管理。当然也是为了方便分批系统资源。 进程是程序一...

    1、进程管理属于处理器(CPU)管理的内容。那么为何要引入进程,为什么不能以程序为单位进行程序运行的管理?
    因为程序的运行是走走停停的,为有效描述程序在内存中的运行状态(例如当前是否处于运行状态还是就绪状态、阻塞状态,占用了哪些系统资源等)。
    简单说就是便于管理。当然也是为了方便分批系统资源。
    进程是程序的一次执行,是动态的,而程序是静态的;进程是程序运行时资源分配的独立单位;进程相对程序多了一个PCB(进程控制块)。

    2.什么是调度,什么是队列?
    调度就是安排的意思,进程管理中的调度指的是处理机调度:就是从就绪队列中,按照一定的算法(有哪些算法,以后的课程讲述)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
    队列就是排队的队伍,内存中有多道程序运行,他们相互争夺处理机这一重要的资源,因此进程需要排队等待使用这一资源。
    就绪队列就是就绪的队伍即是等待运行的队伍,阻塞队列就是阻塞的队伍即是等待I/O的队伍。
    没有运行的队列,因为任何时刻都只有一个进程处于运行态,但就绪态和阻塞态的进程可能不止一个,因此有相关队列。
    3、在进程状态转换图中,如何理解运行状态转换到就绪状态的“超时”这个条件?
    超时其实是基于公平原则而设置的,例如,如果有一个进程运行时间很长且执行过程中并未发生I/O事件(即没有发生阻塞),那么它将长时间占用CPU,而其它进程就得不到cpu的执行,因此要像分时系统那样给每个进程设置相等的时间片,超时后该进程要结束运行,重新排队。

    4.如何理解挂起和激活?
    挂起和激活的区别很简单,就是进程激活那么进程处于内存中,如果挂起则处于外存中,进程由激活变成挂起,则表示其由内存调出到外存中(调出到外存的对换区中,内存管理的章节中会讲到,包括为什么要由内存转入外存,也在后续课程中讲述);进程由挂起变成激活,则表示其由外存重新调入内存。挂起就绪表示在外存排队等待执行,挂起阻塞表示在外存中排队等待I/O。
    进程只有回到内存后才能得到cpu的执行,即挂起状态的进程不能立即执行。
    转回激活的就绪状态才能得到cpu的执行。

    5、理解就绪,阻塞/唤醒,挂起/激活,就绪挂起,阻塞挂起,就绪队列,阻塞队列,就绪挂起队列,阻塞挂起队列 。
    就绪:进程处于万事俱备只欠东风(就差CPU的执行)的状态。已经为进程创建好了PCB,并放大就绪队列中排队,就等CPU的执行了。
    PCB:进程控制块
    阻塞:进程因为需要某个条件(如I/O)而暂时停止CPU的执行,唤醒:把进程由阻塞变为就绪(之前的条件已经得到满足)
    挂起:因内存空间不足而暂时把内存中的某个或某些进程调回外存(放到外存的对换区),激活:把暂时调出内存的处于挂起状态的进程重新调入内存(内存空间能够满足要求)
    就绪挂起:在外存就绪,经激活后到就绪队列等待CPU的执行
    阻塞挂起:在外存等待条件(或事件的发生),经激活后到阻塞队列等待事件发生
    队列:处于相同状态的进程按某种算法进行排队的队伍

    6.PCB是一个数据结构,对应C语言中的一个struct,通过查看定义在struct中的成员,可否总结一下PCB的主要功能?引申问题,所有PCB的大小(当前内存空间)一样吗?
    1)作为独立运行基本单位的标志,PCB中定义了一个进程标识符(进程唯一的身份证号码)
    2)能实现间断性运行方式,PCB中定义了描述处理机状态(处理机状态信息)的成员,以便在该进程中断完成后重新执行时,能从断点继续执行。
    3)提供进程管理所需要的信息
    4)提供进程调度所需要的信息
    5)实现与其他进程的同步与通信
    引申问题:同一个系统中PCB的大小是一样的。
    同一个系统中PCB占用的内存空间是一样的,用同一个struct定义。

    7.如何理解原语?为什么创建/终止,阻塞/唤醒,挂起/激活要用到原语?
    原语是由若干条指令组成的,用于完成一定功能的一个过程。具有不可分割性:即原语的执行必须是连续的,在执行过程中不允许被中断。
    显然进程在创建/终止,阻塞/唤醒,挂起/激活的过程中,一旦开始就必须做完,不能半途而废,否则会造成系统问题。
    创建进程不能创建到一半不做了,如果创建不成功那么之前所做的事情要全部撤销。

    8.请举例有哪些临界资源?现实世界中还有哪些相同的事例?
    表格中的某个单元格,CPU,打印机,键盘,程序中的共享变量这些是。
    一次仅允许一个进程使用的共享资源称为临界资源。
    现实世界的事例:买火车票时同一趟火车的剩余票数,同一个候选人的得票数…
    为了保证各个进程对临界资源的互斥访问,则要加入同步机制(下一节的内容)
    9.处理机管理有哪些主要功能?它们的主要任务是什么?

    答:处理机管理的主要功能是:进程管理、进程同步、进程通信和处理机调度;
    进程管理:为作业创建进程,撤销已结束进程,控制进程在运行过程中的状态转换。
    进程同步:为多个进程(含线程)的运行顺序进行协调。
    进程通信:用来实现在相互合作的进程之间的信息交换。
    处理机调度:
    (1)作业调度。从后备队里按照一定的算法,选出若干个作业,为他们分配运行所需的资源(首选是分配内存)。
    (2)进程调度:从进程的就绪队列中,按照一定算法选出一个进程,把处理机分配给它,并设置运行现场,使进程投入执行。

    10、文件管理有哪些主要功能?其主要任务是什么?
    答:文件管理主要功能:文件存储空间的管理、目录管理、文件的读/写管理和保护。文件管理的主要任务:管理用户文件和系统文件,方便用户使用,保证文件安全性。

    11、是什么原因使操作系统具有异步性特征?
    答:操作系统的异步性体现在三个方面:一是进程的异步性,进程以人们不可预知的速度向前推进,二是程序的不可再现性,即程序执行的结果有时是不确定的,三是程序执行时间的不可预知性,即每个程序何时执行,执行顺序以及完成时间是不确定的。
    12、试从动态性,并发性和独立性上比较进程和程序?
    (1)动态性是进程最基本的特性,表现为由创建而产生,由调度而执行,因得不到资源
    而暂停执行,由撤销而消亡。进程有一定的生命期,而程序只是一组有序的指令集合,是静
    态实体。
    (2)并发性是进程的重要特征,同时也是OS 的重要特征。引入进程的目的正是为了使
    其程序能和其它进程的程序并发执行,而程序是不能并发执行的。
    (3)独立性是指进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独
    立调度的基本单位。对于未建立任何进程的程序,不能作为独立单位参加运行。
    13、试说明PCB 的作用,为什么说PCB 是进程存在的惟一标志?

    PCB 是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在
    多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其它进程
    并发执行的进程。OS是根据PCB对并发执行的进程进行控制和管理的。

    14、试说明进程在三个基本状态之间转换的典型原因。
    (1)就绪状态→执行状态:进程分配到CPU资源
    (2)执行状态→就绪状态:时间片用完
    (3)执行状态→阻塞状态:I/O请求
    (4)阻塞状态→就绪状态:I/O完成
    15、在进行进程切换时,所要保存的处理机状态信息有哪些?

    正确答案:
    进行进程切换时,所要保存的处理机状态信息有:
    (1)进程当前暂存信息;
    (2)下一指令地址信息;
    (3)进程状态信息;
    (4)过程和系统调用参数及调用地址信息。
    16、试说明引起进程被撤销的主要事件。

    正确答案:
    引起进程被撤销的主要事件有:正常结束、异常结束(越界错误、保护错、非法指令、
    特权指令错、运行超时、等待超时、算术运算错、I/O 故障)、外界干预(操作员或操作系
    统干预、父进程请求、父进程终止)。

    17、在创建一个进程时所要完成的主要工作是什么?

    正确答案:
    (1)OS 发现请求创建新进程事件后,调用进程创建原语Creat();
    (2)申请空白PCB;
    (3)为新进程分配资源;
    (4)初始化进程控制块;
    (5)将新进程插入就绪队列。
    18、试说明引起进程阻塞或被唤醒的主要事件是什么?

    正确答案:
    (1)请求系统服务;
    (2)启动某种操作;
    (3)新数据尚未到达;
    (4)无新工作可做。
    19、进程在运行时存在哪两种形式的制约?并举例说明之。

    正确答案:
    (1)间接相互制约关系。
    举例:有两进程A 和B,如果A 提出打印请求,系统已把唯一的一台打印机分配给了进程B,则进程A只能阻塞;一旦B释放打印机,A才由阻塞改为就
    绪。
    (2)直接相互制约关系。
    举例:有输入进程A通过单缓冲向进程B提供数据。当缓冲空时,计算进程因不能获得所需数据而阻塞,当进程A 把数据输入缓冲区后,便唤醒进程B;反之,当缓冲区已满时,进程A因没有缓冲区放数据而阻塞,进程B将缓冲区数据取走后便唤醒A。
    20、为什么进程在进入临界区之前应先执行“进入区”代码(进入临界区之前的代码)?而在退出后又要执行“退出区”代码?(退出临界区后的代码)

    正确答案:
    为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码为"进入区"代码;在退出临界区后,必须执行"退出区"代码,用于恢复未被访问标志,使其它进程能再访问此临界资源。
    21、进程互斥机制应遵循哪些基本准则?为什么?

    正确答案:
    进程互斥机制应遵循的基本准则是:空闲让进、忙则等待、有限等待、让权等待
    原因:为实现进程互斥进入自己的临界区。

    22、整型信号量机制是否完全遵循了同步机构的四条准则?

    正确答案:
    整型信号量机制不完全遵循同步机制的四条准则,它不满足“让权等待”准则。
    23、如何利用信号量机制来实现多个进程对临界资源的互斥访问?并举例说明之。

    正确答案:
    为使多个进程互斥访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。这样,每个欲访问该临界资源的进程在进入临界区之前,都要先对mutex 执行wait 操作,若该资源此刻未被访问,本次wait 操作必然成功,进程便可进入自己的临界区,这时若再有其他进程也欲进入自己的临界区,此时由于对mutex 执行wait操作定会失败,
    因而该进程阻塞,从而保证了该临界资源能被互斥访问。当访问临界资源的进程退出临界区后,应对mutex执行signal 操作,释放该临界资源。利用信号量实现进程互斥的进程描述
    如下:

    var mutex: semaphore:=1begin
       parbegin
          process 1: begin
             repeat
                wait(mutex);
                critical section;//进入临界区
                signal(mutex);
                remainder section
             until falseend
          process 2: begin
             repeat
                wait(mutex);
                critical section;//进入临界区
                signal(mutex);
                remainder section
             until falseend
       parend
    end
    

    24、设有5台打印机为3个进程(p1,p2,p3)共享使用,试分别写出相应的程序来描述这个同步问题。
    正确答案:

    Var n : semaphore:=5;
    begin
        parbegin
            p1;
            p2;
            p3;
        parend
    end
    p1:
    begin
        repeat
            wait(n);
            print; //使用打印机
            signal(n);
        until false
    end
    p2和p3的代码与p1相同。
    

    25、在生产者消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果有何影响?
    正确答案:
    如果缺少signal(full),那么表明从第一个生产者进程开始就没有改变信号量full 值,即使缓冲池产品已满,但full 值还是0,这样消费者进程执行wait(full)时认为缓冲池是空而取不到产品,消费者进程一直处于等待状态。
    如果缺少signal(empty),在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品empty 值并不改变,直到缓冲池取空了,empty 值也是0,即使目前缓冲池有n 个空缓冲区,生产者进程要想再往缓冲池中投放产品也会因为申请不到空缓冲区被阻塞。
    26、在生产消费者问题中,如果将两个wait 操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)与signal(full)互换位置,结果如何?

    正确答案:
    将wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。
    27、我们在为某一临界资源设置一把锁W,当W=0(若为负数,则其绝对值为阻塞队列的长度)时表示加锁状态,当W=1时表示开锁状态。试写出利用整型信号量和记录型信号量实现加锁和开锁的原语,并写出程序利用这些原语实现多个进程对该临界资源的互斥访问。

    正确答案:

    1)整型信号量加锁和开锁原语:
    lock(W): //加锁原语
       while (W<=0) do no-op
       W:=W-1;
    unlock(W): //开锁原语
       W:=W+1;
    2)记录型信号量加锁和开锁原语:
    lock(W): //加锁原语
       W:=W-1;
       if(W<0) then block(W, L)
    unlock(W): //开锁原语
       W:=W+1;
       if(W<=0) then wakeup(W, L)
    
    多个进程对该临界资源的互斥访问的程序:
    Var W : semaphore:=1//初始为开锁状态
    begin
       repeat
          lock(W);
          critical section
          unlock(W);
          remainder section
       until false;
    end
    
    

    28、试修改下面生产者-消费者问题解法中的错误(重新写出完整的代码):

    Var mutex,full,empty : semaphore:=1,0,n;//n是缓冲区单元格总数
    producer:
    begin
        repeat
            …
            producer an item in nextp;
            wait(mutex);
            wait(full);
            buffer(in):=nextp;
            signal(mutex);
        until false;
    end
    
    consumer:
    begin
        repeat
            wait(mutex);
            wait(empty);
            nextc:=buffer(out);
            out:=out+1;
            signal(mutex);
            consumer item in nextc;
        until false;
    end
    
    

    正确答案:

    Var mutex,full,empty : semaphore:=1,0,n;//n是缓冲区单元格总数
    producer:
    begin
        repeat
            …
            producer an item in nextp;
            wait(mutex);
            wait(full); /* 应为wait(empty),而且还应该在wait(mutex)的前面 */
            buffer(in):=nextp;
            /* 缓冲池数组游标应后移,这里加上这一行: in:=(in+1) mod n; */
            signal(mutex);
            /* 加上这一行: signal(full); */
        until false;
    end
    
    consumer:
    begin
        repeat
            wait(mutex);
            wait(empty); /* 应为wait(full),而且还应该在wait(mutex)的前面 */
            nextc:=buffer(out);
            out:=out+1; /* 考虑循环,应改为: out:=(out+1) mod n; */
            signal(mutex);
            /* 这里加上这一行: signal(empty); */
            consumer item in nextc;
        until false;
    end
    
    
    展开全文
  • 进程间通信之信号

    2018-04-18 22:26:03
    1. 信号是进程间通信一种机制。...内核可以利用信号来通知用户空间的进程发生了哪些事件。 3. 信号事件有两种来源:按键触发事件与使用系统调用或者命令发出信号。 4. 进程对信号一般有三...

    1. 信号是进程间通信的一种机制。信号可以在进程任何状态下发送。如果一个信号被进程阻塞,则信号的传递被延迟,直到阻塞被取消时才被传递给进程。

    2. 信号也属于一种模仿软中断机制,是一种异步通信方式,信号可以在用户空间进程和内核之间直接交互。内核可以利用信号来通知用户空间的进程发生了哪些事件。

    3. 信号事件有两种来源:按键触发的事件与使用系统调用或者命令发出的信号。

    4. 进程对信号一般有三种处理方式:执行默认操作、捕捉信号、忽略信号。

    5. 系统中有两个特殊的信号SIGKILL和SIGSTOP, 如果这两个信号可以被进程阻塞,那这个进程就无法被管理员管理。

    6. 信号集

     The  following  signals shall be supported on all implementations (default actions are explained
           below the table):
    
                  ┌──────────┬────────────────┬────────────────────────────────────────────────────┐
                  │ Signal   │ Default Action │                    Description                     │
                  ├──────────┼────────────────┼────────────────────────────────────────────────────┤
                  │SIGABRT   │       A        │ Process abort signal.                              │
                  │SIGALRM   │       T        │ Alarm clock.                                       │
                  │SIGBUS    │       A        │ Access to an undefined portion of a memory object. │
                  │SIGCHLD   │       I        │ Child process terminated, stopped,                 │
                  │          │                │ or continued.                                      │
                  │SIGCONT   │       C        │ Continue executing, if stopped.                    │
                  │SIGFPE    │       A        │ Erroneous arithmetic operation.                    │
                  │SIGHUP    │       T        │ Hangup.                                            │
                  │SIGILL    │       A        │ Illegal instruction.                               │
                  │SIGINT    │       T        │ Terminal interrupt signal.                         │
                  │SIGKILL   │       T        │ Kill (cannot be caught or ignored).                │
                  │SIGPIPE   │       T        │ Write on a pipe with no one to read it.            │
                  │SIGQUIT   │       A        │ Terminal quit signal.                              │
                  │SIGSEGV   │       A        │ Invalid memory reference.                          │
                  │SIGSTOP   │       S        │ Stop executing (cannot be caught or ignored).      │
                  │SIGTERM   │       T        │ Termination signal.                                │
                  │SIGTSTP   │       S        │ Terminal stop signal.                              │
                  │SIGTTIN   │       S        │ Background process attempting read.                │
                  │SIGTTOU   │       S        │ Background process attempting write.               │
                  │SIGUSR1   │       T        │ User-defined signal 1.                             │
                  │SIGUSR2   │       T        │ User-defined signal 2.                             │
                  │SIGPOLL   │       T        │ Pollable event.                                    │
                  │SIGPROF   │       T        │ Profiling timer expired.                           │
                  │SIGSYS    │       A        │ Bad system call.                                   │
                  │SIGTRAP   │       A        │ Trace/breakpoint trap.                             │
                  │SIGURG    │       I        │ High bandwidth data is available at a socket.      │
                  │SIGVTALRM │       T        │ Virtual timer expired.                             │
                  │SIGXCPU   │       A        │ CPU time limit exceeded.                           │
                  │SIGXFSZ   │       A        │ File size limit exceeded.                          │
                  │          │                │                                                    │
                  └──────────┴────────────────┴────────────────────────────────────────────────────┘
           The default actions are as follows:
    
           T     Abnormal termination of the process.
    
           A     Abnormal termination of the process with additional actions.
    
           I     Ignore the signal.
    
           S     Stop the process.
    
           C     Continue the process, if it is stopped; otherwise, ignore the signal.
    

    举例 :

            printf("signal number: %d\n", num);
            printf("SIGINT is caught\n");
    }
    
    void sigill_handler(int num)
    {
            printf("signal number: %d\n", num);
            printf("SIGILL is caught\n");
    }
    
    int main()
    {
            pid_t pid;
    
            signal(SIGINT, sigint_handler);
            signal(SIGILL, sigill_handler);
    
            pid = fork();
    
            if(pid == 0)
            {
                    printf("child process send SIGILL signal to parent process\n");
                    sleep(5);
                    kill(getppid(), SIGILL);
                    return 0;       }
    
            while(1)
            {
                    sleep(1);
            }
    "signal.c" 40L, 592C                                                                    33,13-33      80%
    

    结果:

    等5s触发SIGILL信号

    ctrl+c触发SIGINT信号

    june@june-PC:~/test$ ./signal 
    child process send SIGILL signal to parent process
    signal number: 4
    SIGILL is caught
    ^Csignal number: 2
    SIGINT is caught
    ^Z
    [4]+  已停止               ./signal
    

     

    展开全文
  • 死锁: 指多个进程在运行过程中因争夺资源而造成一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 死锁原因有两个: a. 竞争资源 系统中资源可以分为两类: (1)可剥夺资源,是...

    死锁: 指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

    在这里插入图片描述

    死锁的原因有两个:

    a. 竞争资源

    系统中的资源可以分为两类:

    (1)可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;

    (2)不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。

    产生死锁中的竞争资源之一指的是竞争不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞)

    产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、信号、消息、缓冲区内的消息等),通常消息通信顺序进行不当,则会产生死锁

    b. 进程间推进顺序非法

    若P1保持了资源R1,P2保持了资源R2,系统处于不安全状态,因为这两个进程再向前推进,便可能发生死锁

    例如,当P1运行到P1:Request(R2)时,将因R2已被P2占用而阻塞;当P2运行到P2:Request(R1)时,也将因R1已被P1占用而阻塞,于是发生进程死锁

    死锁的四个必要条件

    (1) 互斥条件:一个资源每次只能被一个进程使用。
    (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

    如何解开死锁??

    1.剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;

    2.撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

    附加::

    如何预防死锁?

    1)资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)

    2)只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)

    3)可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)

    4)资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

    避免死锁:

    预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全的状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

    银行家算法:首先需要定义状态和安全状态的概念。系统的状态是当前给进程分配的资源情况。因此,状态包含两个向量Resource(系统中每种资源的总量)和Available(未分配给进程的每种资源的总量)及两个矩阵Claim(表示进程对资源的需求)和Allocation(表示当前分配给进程的资源)。安全状态是指至少有一个资源分配序列不会导致死锁。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程知道同意该请求后系统状态仍然是安全的。

    参考

    https://blog.csdn.net/nan_lei/article/details/83867694

    展开全文
  • 程序执行过程中需要的资源进程控制块:完成状态保存的单元线程:线程是寄托在进程之上,为了提高系统的并发性线程是进程的实体进程是一个资源管理单元、线程是最小的执行单元注意:一个线程只能属于一个进程,而一个...
  • 总结下排查CPU故障的方法和技巧有哪些: 1、top命令:Linux命令。...根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。 -- jstack top 查看进程 ps aux | gr..
  • 1.对于进程控制块中基本元素,哪些属于线程控制块,哪些属于进程控制块? 一般来说,进程是资源所有者,而每个线程都有它自己执行状态。 进程标识:进程必须被标识,而进程中每一个线程也必须有自己ID。...
  • 操 作 系 统 第 3 章 习 题 带 答 案 精品文档 第三章 一问答题 1用户级线程与内核级线程区别是什么 2PCB中包含哪些信息进程状态属于哪类信息 3什么是操作系统内核 4 简述时间片轮转调度算法基本思想 5某系统...
  • CPU高问题排查

    2017-04-07 10:50:16
    最后,总结下排查CPU故障的方法和技巧有哪些: 1、top命令:Linux命令。...属于当前状态的采样数据。 3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的
  • 浏览器相关原理(面试题)详细总结一

    千次阅读 2019-10-16 15:20:49
    后续再新开标签页,浏览器、网络进程、GPU进程是共享,不会重新启动,如果2个页面属于同一站点话,并且从a页面中打开b页面,那么他们也会共用一个渲染进程,否则新开一个渲染进程。 最...
  • Linux页框管理

    2015-09-13 10:40:14
    在前面的博文里,我们讲解了基于80x86体系的Linux内核分段和分页机制,并详细地讨论了Linux的内存布局...内核必须记录每个页框的当前状态,例如,区分哪些页框包含的是属于进程的页,而哪些页框包含的是内核代码或内核
  • 3Linux页框管理

    2012-07-26 00:13:30
    在前面的博文里,我们讲解了基于80x86体系的Linux内核分段和分页机制,并详细地讨论了Linux的...内核必须记录每个页框的当前状态,例如,区分哪些页框包含的是属于进程的页,而哪些页框包含的是内核代码或内核数据。内
  •  2)内核必须能够区分哪些页框包含的是属于进程的页,而那些页框包含的是内核代码或者内核数据。  3)空闲页框:动态内存中不包含有用数据。  不空闲页框:包含用户态进程的数据,某个软件高速缓存的数据,动态...
  • 操作系统第3章习题带答案 精品文档...2PCB中包含哪些信息进程状态属于哪类信息 3什么是操作系统内核 4简述时间片轮转调度算法基本思想 5某系统采用时间片轮转调度算法处理机调度算法某个时刻根据用户要求创建了一
  • 重学系列之内存和IO

    2020-09-13 20:02:14
    pcstat -pid $$ :内存中缓存页的状态(大小,编号等等) read x:通过键盘数据复制变量 proc:映射的内核的虚拟文件系统,其中包含变量和所有程序的文件信息包括所有文件描述,开启的文件等等。 重定向:Linux万物皆...
  • 网络基础知识

    2019-09-01 14:38:03
    TCP是一种面向连接、可靠、基于字节流传输层通信协议,属于传输层协议。 HTTP协议重要内容有请求头、请求体、响应状态码、响应头、无状态等。 2 TCP一些基本概念,首部多大且有哪些内容,三次...
  • 11、文件物理组织形式有哪些?各有什么优缺点? 12、什么是文件共享?文件链接如何实现文件共享? 13、为什么要引入缓冲技术?设置缓冲区原则是什么? 14、什么是中断?什么是中断源?什么是中断请求?什么是...
  • 1.1.8 NFS 和 SMB 是最常见两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 NFS 和 SMB 协议共享给多个主机访问时,以下哪些说法是错误 1.1.9 输入 ping IP 后敲回车,发包前会发生什么?...
  • 三个基本状态是等待、执行和就绪,在一定的条件下,进程的状态将发生转换。 (2)进程调度算法 主要有先来先服务(FCFS)、时间片轮转法、多级反馈轮转法、优先数法。 (3)进程控制块(PCB)是进程...
  •  ● about:plugins - 用来显示附加元件的状态  ● about:version-显示版本信息  ● about:crash - 显示崩溃画面  ● about:hang - 使这个页面假死(不接受任何命令)  ● about:shorthang - 让这个页面假死约20...
  • 122.hibernate 对象有哪些状态? 123.在 hibernate 中 getCurrentSession 和 openSession 区别是什么? 124.hibernate 实体类必须要有无参构造函数吗?为什么? 十三、Mybatis 125.mybatis 中 #{}和 ${}区别是...
  • 而无偿服务开放场馆定期开放的比例比较低,其资源利用还停留在无序的状态中。有偿服务开放的场馆,为消费者提供了完善的设施和服务质量,并有专人指导。而无偿服务开放的场馆,场地器械陈旧,主要是自由锻炼为主。...
  • LINGO软件学习

    2009-08-08 22:36:50
    当采用方式①时,必须显式罗列出所有要包含在派生集中成员,并且罗列每个成员必须属于稠密集。使用前面例子,显式罗列派生集成员: allowed(product,machine,week)/A M 1,A N 2,B N 1/; 如果需要生成一个大...
  • 36. 线程和进程的区别? 14 37. 守护线程是什么? 14 38. 创建线程有哪几种方式? 14 39. 说一下 runnable 和 callable 有什么区别? 15 40. 线程有哪些状态? 15 41. sleep() 和 wait() 有什么区别? 16 42. notify...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

哪些状态属于进程的状态