#!/bin/sh
#This is a process with an id of $$
( sleep 1000 )& #this creates an idle child
( (sleep 1000)& sleep 1000 )& #this creates an idle child and grandchild
wait #this waits for direct children to finish
Run Code Online (Sandbox Code Playgroud)
./1.sh &
在我的系统上运行上述内容创建了以下进程树:
$ command ps -o pid,ppid,pgrp,stat,args,wchan --forest
PID PPID PGRP STAT COMMAND WCHAN
24949 4783 24949 Ss /bin/bash wait
25153 24949 25153 S \_ /bin/sh ./1.sh sigsuspend
25155 25153 25153 S | \_ sleep 1000 hrtimer_nanosleep
25156 25153 25153 S | \_ sleep 1000 hrtimer_nanosleep
25158 25156 25153 S | \_ sleep 1000 hrtimer_nanosleep
Run Code Online (Sandbox Code Playgroud)
您可以注意到树具有相同的进程组 ( PGRP ) 25153,它与第一个进程的PID相同。每当您以交互模式(或显式打开作业控制)启动新命令时,shell 都会创建一个进程组。
所述PGRP机构允许壳体在一次信号发送到的整个过程组而不产生的竞争条件。这用于作业控制,以及当您的脚本运行和前台作业时,用于发送:
您可以通过执行相同的操作,例如:
kill -INTR -25153
Run Code Online (Sandbox Code Playgroud)
其中INTR是信号, 25153 是要将信号发送到的进程组。在-
之前的25153个手段您指定了PGRP ID,而不是一个PID。
在您的情况下,您应该发送的信号是-TERM
(请求终止)。Term 是默认信号kill
发送,但是,如果您的目标是 group 而不是PID,则必须明确指定它。
kill -TERM -25153
Run Code Online (Sandbox Code Playgroud)
如果要杀死上次启动的后台作业的进程组,可以执行以下操作:
kill -TERM -$!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3059 次 |
最近记录: |