首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程退出如何确保进程退出

前言 进程退出的时候,进程能够收到进程退出的信号,便于管理,但是有时候又需要在进程退出的时候,进程退出,该怎么办呢? 进程退出进程会如何?...内容很多,主要意思为:设置一个信号,进程退出的时候,进程将会收到该信号。 那么根据这个,我们完全可以在进程退出,也给进程一个退出的信号。...可以看到,由于加入了 prctl(PR_SET_PDEATHSIG,SIGKILL); 在进程退出进程将会收到SIGKILL信号,而进程收到该信号的默认动作则是退出。...总结 有些情况下,我们常常需要父子进程共存亡,进程退出进程可以通过wait捕捉进程退出状态,但是进程退出进程却难以得知。...因此,在最初fork进程的时候,便表明了,进程退出的时候,进程收到SIGKILL信号,最终也退出。以此达到同生共死的目的。

11.7K21
您找到你想要的搜索结果了吗?
是的
没有找到

Linux Systemd 实战

字段 含义 simple(默认值) ExecStart字段启动的进程为主进程 forking ExecStart字段将以fork()方式启动,此时进程将会退出进程将成为主进程 oneshot...上面这个例子中,将KillMode设为process,表示只停止进程,不停止任何sshd 进程,即进程打开的 SSH session 仍然保持连接。...字段 含义 no(默认值) 退出后不会重启 on-success 只有正常退出退出状态码为0),才会重启 on-failure 非正常退出退出状态码非0),包括被信号终止和超时,...u python脚本名 WorkingDirectory = /home #脚本所在目录# StandardOutput = inherit StandardError = inherit Restart...入门教程:实战篇 阮一峰 在linux 上用系统命令systemctl 执行python脚本

1.6K20

Linux学习笔记之Centos7 自定义systemctl服务脚本

0x01 配置   Centos7的服务systemctl 脚本一般存放在:/usr/lib/systemd , 目录下又有user和system之分 /usr/lib/systemd/system...forking: # ExecStart字段以fork()方式启动,此时进程退出进程将成为主进程(后台运行)。...,都会被杀掉 process: # 只杀主进程 mixed: # 主进程将收到SIGTERM信号,进程收到SIGKILL信号 none: # 没有进程会被杀掉,只是执行服务的...stop命令 Restart的类型: no(默认值): # 退出后无操作 on-success: # 只有正常退出退出状态码为0),才会重启 on-failure: #...on-watchdog: # 超时退出,才会重启 always: # 不管什么退出原因,都会重启 # 对于守护进程,推荐用on-failure RestartSec字段:

2.9K30

如何在Bash中等待多个子进程完成,并且其中任何一个进程以非零退出状态结束,使主进程也返回一个非零的退出码?

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且这其中任意一个进程以非零退出码结束,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建进程退出状态,并且任何进程以非零代码结束,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成确实获取了它的返回代码...[ $rc -ne 0 ] && break # 若进程以非零退出码结束,则跳出循环 done #echo $rc exit $rc 将代码保存为文件 wait_procs_demo.sh,再运行测试

6200

如何编写bash脚本以便在进程死机时重新启动进程

问: 我有一个python脚本,它将检查队列并对每个元素执行操作: # checkqueue.py while True: check_queue() do_something() 我如何编写一个...假设你的进程名为procA,监控它的进程名为procB,则需要procB成为procA的进程。因为只有启动你的进程进程才能可靠地等待它结束。而这在Bash中很容易实现。...它结束,until检查其退出状态。如果退出状态为0,则表示它正常结束(这意味着你要求它以某种方式关闭,并且它成功关闭了)。在这种情况下,我们不想重新启动它(我们只是要求它关闭!...然后需要做的就是启动这个bash脚本,它将监控procA并在必要重新启动它。如果你想在(操作系统)启动启动监控脚本,你可以用@reboot规则在用户的 cron(1) 中调度它。...或者,查看systemd.unit(5)。你可以在/lib/systemd/system目录中添加一个名为procA.service的配置文件,让systemd进程监控你的procA。

16520

100个Linux命令(7)-进程管理

且杀死进程(非终端进程),会导致进程变成孤儿进程,孤儿进程进程总是init/systemd进程的状态以及转换 进程并非总是处于运行中,至少cpu没运行在它身上它就是非运行的。...后台进程出错,或者执行完成,总之后台进程终止进程会收到信号。...事实也确实如此,shell脚本只会继承shell的一项属性:进程所存储的各命令的路径。另外,执行shell脚本有一个动作:命令执行完毕后自动退出shell。...一般的方法也是最简单的方法是使用nohup命令带上要执行的命令或脚本放入后台,这样任务就脱离了终端的关联。终端退出,该任务将自动挂到init(或systemd)进程下执行。...17 进程中断或退出,发送该信号告知进程自己已完成,进程收到信号将告知内核清理进程列表。

1.7K20

编写一个服务systemd的启动方式

simple(默认值):ExecStart字段启动的进程为主进程forking:ExecStart字段将以fork()方式启动,此时进程将会退出进程将成为主进程oneshot:类似于simple,...上面这个例子中,将KillMode设为process,表示只停止进程,不停止任何sshd 进程,即进程打开的 SSH session 仍然保持连接。...control-group(默认值):当前控制组里面的所有进程,都会被杀掉process:只杀主进程mixed:主进程将收到 SIGTERM 信号,进程收到 SIGKILL 信号none:没有进程会被杀掉...no(默认值):退出后不会重启on-success:只有正常退出退出状态码为0),才会重启on-failure:非正常退出退出状态码非0),包括被信号终止和超时,才会重启on-abnormal:...只有被信号终止和超时,才会重启on-abort:只有在收到没有捕捉到的信号终止,才会重启on-watchdog:超时退出,才会重启always:不管是什么退出原因,总是重启对于守护进程,推荐设为on-failure

35820

docker的reap问题

这发生于进程需要保留表项以允许其父进程读取进程的exit status:一旦退出态通过wait系统调用读取,僵尸进程条目就从进程表中删除,这个过程被称为reap。...进程死后,系统会发送SIGCHLD信号给进程进程对其默认处理是忽略。如果想响应这个消息,进程通常在SIGCHLD信号处理程序中,使用wait系统调用来响应进程的终止。...假设容器中跑一个Web服务器,这个服务器运行bash编写的CGI脚本脚本中调用了grep。Web服务器发现脚本执行超时,杀掉了它,但是grep进程没有受到影响并继续运行。...对bash发送一个SIGTERM信号,bash会终止,但是并不会发送SIGTERM给其进程bash程序终止,内核会停止整个容器和其中的进程。一些进程会接收到SIGKILL信号,不正确地终止。...如果想重新映射程序退出码呢?比如Java接收SIGTERM信号退出退出码是143,而不是0。 docker init无法处理此类情况。 Tini Tini是能想到的最简单的init。

1.2K30

清理linux中的僵尸进程

停止(T):我们可以通过发送适当的信号来停止Linux 进程。 僵尸(Z):一个进程完成它的任务,它会释放它正在使用的系统资源并清理它的内存。...但是,它从进程表中的条目不会被删除,它的状态被设置为EXIT_ZOMBIE。 僵尸进程的创建 一个进程完成它的工作,Linux 内核通过发送SIGCHLD 信号通知退出进程进程。...然后父进程执行wait()系统调用来读取进程的状态并获取退出代码。这也会从进程表中清除进程的条目,此进程结束。 如果进程没有被编程为在创建进程执行wait()系统调用,则不会发生清理。...因此,它会通知进程触发wait()系统调用,这将从进程表中清除已失效的进程。...杀死进程 如果上面无法清除已失效的进程,我们应该考虑杀死其父进程: kill -9 103 103是已失效进程 ID 但是,杀死进程会影响其所有进程

3.3K20

systemd 使用教程【转】

init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。 二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。...Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建进程,创建后父进程会立即退出 Type=oneshot:一次性进程...ExecStop:停止当前服务执行的命令 ExecStopPost:停止其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务...simple(默认值):ExecStart字段启动的进程为主进程 forking:ExecStart字段将以fork()方式启动,此时进程将会退出进程将成为主进程 oneshot:类似于simple...上面这个例子中,将KillMode设为process,表示只停止进程,不停止任何sshd 进程,即进程打开的 SSH session 仍然保持连接。

91720

Supervisor管理进程

1.Supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出能自动重启。...也实现进程挂掉的时候,进程可以准确获取进程挂掉的信息的,可以选择是否自己启动和报警。...supervisor是所有进程进程,管理着启动的进展,supervisor以进程的PID来管理进程进程异常退出supervisor可以收到相应的信号量。...false:进程不会自动重启,unexpected:程序退出退出码不是exitcodes中定义的进程会重启,true:进程会无条件重启退出的时候。...stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号等待的时间 stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组 killasgroup

6.4K1901

这样用 systemd 可能会有风险

宿主服务支持接收服务端指令并拉起一些常驻进程,拉起的进程我们简称为进程宿主服务被 kill 或意外终止,会引起子进程一起被 kill。 为了复现这个问题,我写了两个脚本。...该脚本的作用是每隔10秒钟检查 config.txt 的配置,如果配置文件中的数字变成 1 则拉起一个无限循环的进程。具体的代码可以在我的 Github 上看到。...,进程跟着消失了。...└─session-1.scope │ ├─5125 sshd: root@pts/0 │ └─5129 -bash 修改配置文件让进程拉起一些进程...启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的进程。如果启动的进程能够自己创建pidfile,最好也指定下PIDFile=XXX。

71910

【Linux】深度解析Linux中的几种进程状态

Z :僵尸状态(Linux特有状态) 处于僵尸状态的进程:僵尸进程 进程结束不会立刻释放,会等一小会 一个进程退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程的代码和数据空间被释放...OS必须维护这个推出进程的PCB结构 原因:在进程死亡,操作系统 或者 进程 需要知道进程退出的原因,因此它的PCB里的退出信息不会被释放 进程或者OS读取后,PCB状态先被改成X死亡状态,才会被释放...2)孤儿进程的引入 进程进程运行时,进程退出了,进程会进入僵尸状态吗? 现象:不会进入僵尸状态,而是直接没了。 原因:进程也有其父进程bash,会被其立刻回收!...且进程不对孙子进程负责(即bash不对场景中子进程负责) 进程进程运行时,进程退出了, 进程进入僵尸状态谁来维护它?...回答:进程进程直接退出了,进程要被领养,即 进程被1号进程systemd)领养; 我们称这种状态的进程作“孤儿进程

56310

CentOS7 systemd添加自定义系统服务的方法

systemd: CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,即:/usr/lib/systemd/system...服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。 Type=forking:systemd认为该服务进程fork,且进程退出后服务启动成功。...对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。...可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。...Type=dbus:若以此方式启动,指定的 BusName 出现在DBus系统总线上systemd认为服务就绪。

1.4K10

Linux系统管理-crond、chkconfig、systemd、unit、target

Type=forking:systemd认为该服务进程fork,且进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。...可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。...Type=dbus:若以此方式启动,指定的 BusName 出现在DBus系统总线上systemd认为服务就绪。...ExecReload:指定单元停止执行的命令或者脚本。 ExecStop:指定单元停止执行的命令或者脚本。...RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot需要被配置。

1K20

supervisor简单使用

介绍 Supervisor 是用Python开发的一套通用的进程管理程序,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。...能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出能自动重启,用supervisor管理的进程一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能...,不再需要自己写shell脚本来控制。...,所以需要手动创建目录(supervisord 会自动创建日志文件) stopasgroup=false ;默认为false,进程被杀死,是否向这个进程组发送stop信号,包括进程 killasgroup...=false ;默认为false,向进程组发送kill信号,包括进程 下面我们以nginx为例,来配置一下Nginx的守护进程

47820

linux系统管理及安全管理——systemctlsystemd

可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。...Type=dbus :若以此方式启动,指定的 BusName 出现在DBus系统总线上systemd认为服务就绪。...Type=forking :systemd认为该服务进程fork,且进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。...ExecStart:启动方式 ExecStop:停止方式 PIDFILE: 指定pid文件,监控进程状态,type=forking,必须指定 Restart:重启条件, always始终重启,即使是...systemctl stop关掉了,也会重启 on-success,成功退出 on-failure,进程退出状态不正常,默认为0,可以使用SuccessExitStatus指定 on-abnormal

5.5K30
领券