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

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

在UNIX中,有充分的理由只能等待子进程。任何试图解决这个问题的方法(ps解析、pgrep、存储PID等)都是有缺陷的,其中存在漏洞。待后文分析。...假设你的进程名为procA,监控它的进程名为procB,则需要procB成为procA的父进程。因为只有启动你的进程的进程才能可靠地等待它结束。而这在Bash中很容易实现。...当它结束时,until检查其退出状态。如果退出状态为0,则表示它正常结束(这意味着你要求它以某种方式关闭,并且它成功关闭了)。在这种情况下,我们不想重新启动它(我们只是要求它关闭!...如果退出状态不是0,until将运行循环体,该循环体在STDERR上发出错误消息,并在 1 秒后重新启动循环(返回第 1 行)。 我们为什么要等一会儿?...因为如果procA的启动顺序出了问题并立即崩溃,你将得到一个非常密集的循环,不断重新启动和崩溃。sleep 1消除了这种压力。

19220

Linux中重启和停止apache程序的方法有哪些

简介   为了停止或者重新启动Apache ,你必须向正在运行的httpd进程发送信号。有两种发送信号的方法。第一种方法是直接使用UNIX的kill命令向运行中的进程发送信号。...为了做到这一点,它将在重新生成子进程的过程中,在scoreboard上保存所有子进程的状态。   ...如 果Apache重启时发现配置文件有误,那么父进程将不会重启,而是报错并退出。...父进程仍然继续运行并监视正在处理请求的子进程,一旦所有子进程完成任务并退出或者超过由GracefulShutdownTimeout指令规定的时间,父进程将会退出。...在超时的情况下,所有子进程都将接收到TERM信号并被强制退出。   在"优雅"状态下,TERM信号将会立即中止父进程和所有子进程。

3.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux服务器杀进程,linux杀死进程命令

    是httpd服务器的父进程,从4833-4840的进程都是它4830的子进程;如果我们杀掉父进程4830的话,其下的子进程也会跟着死掉; [root@localhost ~]# kill 4840 注:...[root@localhost ~]# kill 4830 注:杀掉httpd的父进程; [root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其它子进程是否存在...对于僵尸进程,可以用kill -9 来强制终止退出; 比如一个程序已经彻底死掉,如果kill 不加信号强度是没有办法退出,最好的办法就是加信号强度 -9 ,后面要接杀父进程;比如; [root@localhost...用法:killall 正在运行的程序名 killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行; 举例: [root@localhost beinan]#...比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就OK了。

    6.9K10

    【Linux】关于进程的理解、状态、优先级和进程切换

    t状态: 这也是一种暂停状态,tracing stop表示该进程正在被追踪 ---- 三、两个特殊进程 进程退出的时候不能立即释放该进程对应的资源!...当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 下面,我们可以通过具体的例子来看一看僵尸进程,进程退出,但是没有被回收(父进程、OS)。...父进程如果一直不读取,那子进程就一直处于Z状态 维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说, Z状态一直不退出, PCB一直都要维护...话不多说,我们直接通过一小段代码来看一看: 先来看一看z状态(杀掉子进程): 现在重新启动进程(杀掉父进程): 父进程结束掉没有看到它的僵尸状态:父进程也有父进程,都是bash的子进程,所以bash...子进程被1号领养的就是孤儿进程。 父进程先退出的现象是一定存在的,子进程会被操作系统领养(1号进程),这是为了回收子进程退出的时候对应的僵尸,管理子进程 被领养的进程就是孤儿进程。

    2.7K20

    Systemd 入门教程:实战篇

    Loaded行:配置文件的位置,是否设为开机启动 Active行:表示正在运行 Main PID行:主进程ID Status行:由应用本身(这里是 httpd )提供的软件当前状态 CGroup块:应用的所有子进程...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

    1K70

    进程状态,优先级以及进程切换

    进程被创建出来是要完成任务的,所以进程在退出的时候不会立即将该进程对应的资源释放掉,而是要保存一段时间等待父进程或者操作系统来读取子进程的返回代码,因为父进程/操作系统需要知道它交子进程的任务,子进程执行的怎么样...子进程结束以后的返回结果会存放在PCB中,一个进程退出了它对应的数据和代码可以被释放掉,但它对应PCB不会被释放,需要等待父进程读取完PCB中的返回结果以后由父进程来回收这块资源,如果父进程一直不回收,...,但是父进程还在运行也没有回收子进程的资源,所以子进程就陷入了僵尸状态(defunct译为死者),我无法通过kill命令杀死僵尸进程,因为它本身就已经死了,只是父进程还没有回收对应的资源。...2.孤儿进程 子进程先终止父进程不回收,子进程就会变成僵尸进程,如果父进程先终止,那么为了防止子进程的资源没人回收,操作系统(1号进程)就会领养该子进程。此时这个子进程就可以被称为孤儿进程。...父进程先于子进程退出的情况是一定存在的,当父进程先于子进程退出时,操作系统为了防止资源浪费(内存泄漏)也必定会领养这个进程,此时这个子进程的父进程就变成了1号进程并且由前台程序变成后台程序。

    1.4K40

    探索Linux下进程状态 | 僵尸进程 | 孤儿进程

    当进程退出并且父进程(使用wait()系统调用,后面讲)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 代码: #include #include #include...僵尸进程危害: 进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z状态?是的!...孤儿进程 僵尸进程代码中是子进程先退出,父进程一直运行 在孤儿进程中,让父进程先退出,子进程一直运行 代码: #include #include...父进程也是bash的子进程,父进程结束后,它的父进程bash会将它回收掉,并且过程很快,所以父进程不会处于僵尸状态。

    15010

    Linux Systemd 实战

    Loaded行:配置文件的位置,是否设为开机启动 Active行:表示正在运行 Main PID行:主进程ID Status行:由应用本身(这里是 httpd )提供的软件当前状态 CGroup块:应用的所有子进程...字段 含义 simple(默认值) ExecStart字段启动的进程为主进程 forking ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程 oneshot...上面这个例子中,将KillMode设为process,表示只停止主进程,不停止任何sshd 子进程,即子进程打开的 SSH session 仍然保持连接。...字段 含义 control-group(默认值) 当前控制组里面的所有子进程,都会被杀掉 process 只杀主进程 mixed 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL...字段 含义 no(默认值) 退出后不会重启 on-success 只有正常退出时(退出状态码为0),才会重启 on-failure 非正常退出时(退出状态码非0),包括被信号终止和超时,

    1.7K20

    详解僵尸进程与孤儿进程

    ,调用 wait 或 waitpid 系统调用来为子进程回收系统资源(包括进程 id、进程退出状态、进程运行时间)。...但这个过程存在两个问题,那就是如果父进程先于子进程退出了怎么办?以及子进程退出以后,父进程始终没有调用 wait 或 waitpid 怎么办?这就产生了两种进程:孤儿进程与僵尸进程。...当一个父进程退出,而他有若干子进程仍然在执行,那么,这些子进程就变成了孤儿进程。它们会自动被共同的祖先 -- init 进程收养,从而自动完成它们的状态收集工作。...4.1 wait/waitpid 如上文所述,子进程死后,会发送 SIGCHLD 信号给父进程,只要父进程收到此信号后执行 wait/waitpid 函数为子进程收尸即可,子进程就会顺利从僵死状态变为彻底消失...另一方面,通过 bash 创建出来的进程,无论其执行结果如何,bash 都会以 0 作为返回状态退出,这样一来,如果实际执行的子进程是异常崩溃,我们就没有办法获取到这个进程的返回码了,而 docker

    2K20

    Linux中父进程为何要苦苦地知道子进程的死亡原因?

    白发人送黑发人 一个普遍的常识是,在Linux里面总是“白发人送黑发人”,子进程死亡,父进程透过wait()等待子进程死亡,并清理子进程僵尸,当然父进程也可以因此而获得子进程的死亡原因。...上述代码中,子进程在第18行通过pause()等待信号,父进程在代码的第22行通过waitpid()等待子进程的结束。其中的参数status是一个输出参数,可以获得子进程死亡的原因。...则父进程探测到子进程死亡后,可打印它的退出状态: $ ....在wait_task_zombie()中,父进程会透过子进程的僵尸分析获得子进程的exit_code组合,并进一步拼装status。 事出必有因 那么,父进程为什么必须知道子进程的死亡呢?...这个时候我们在系统里面是可以看到simple-server这个进程的,它是顶层systemd这个init进程(PID为1)的子进程: ?

    2.1K20

    孤儿进程和僵尸进程的概念及进程回收(wait函数及waitpid函数)

    一.孤儿进程 孤儿进程可以理解为一个子进程的父进程英年早逝(父进程先于子进程退出),就将这样的一个进程称为孤儿进程,在linux操作系统上。...但是这种做法在大多数情况下都是不可取的,如父进程是一个服务器程序,如果为了回收其子进程的资源,而杀死服务器程序,那么将导致整个服务器崩溃,得不偿失。...返回值:如果为-1,回收失败,已经没有子进程可以回收了。 如果 > 0,返回值为子进程对应的pid。 参数:子进程的退出状态,是一个传出参数。...(2)-1:无子进程可以回收。 (3)=0:参数3为WNOHANG,且子进程正在运行。...2.status:子进程的退出状态,用法同wait函数。 3.options:设置为WNOHANG,函数非阻塞。设置为0,阻塞函数。

    2K20

    操作系统回收进程详解(基于rCore源码)

    父进程对子进程的回收Zombie 状态是进程生命周期的最后状态,之所以设置这个状态,主要目的在于:等待父进程回收子进程,并获取子进程的退出状态。...如果为-1,则检查所有的子进程。当检查到子进程设为 Zombie 状态时,会从child进程容器中移除子进程。...除此之外,sys_waitpid还会将子进程中的状态码写回到用户态内存区域,告知父进程:子进程的退出状态。...原因是可能存在的死锁问题,如下图所示:进程A (正在退出) 进程P (A的父进程) 进程C (A的子进程)---------------------- --...当当前进程企图修改父进程时(将自己的子进程加入到父进程中),必须将Weak指针升级为Arc指针。在这个过程中就需要获得父进程的锁,进而导致上图所示的死锁问题。

    8710

    描述进程和进程状态

    所以,我们需要用到操作系统内核提供的系统调用接口--------getpid 2.3一般来说,在操作系统内部,普通进程都有父进程 我们发现,每次我重新启动程序,虽然我的进程每次都是不一样的。...当进程退出并且父进程(使用 wait() 系统调用 , 后面讲) 没有读取到子进程退出的返回代码时就会产生僵死( 尸 ) 进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入 Z 状态 X 死亡状态( dead ):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。...当进程退出并且父进程(使用 wait() 系统调用 , 后面讲) 没有读取到子进程退出的返回代码时就会产生僵死 ( 尸 ) 进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入 Z 状态 僵尸进程危害 进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了

    9110

    Linux之进程信号(下)

    信号从产生到递达之间的状态,叫做信号未决(Pending)。 进程可以选择阻塞某个信号,被阻塞的信号产生后将保持在未决的状态,直到进程解除对此信号的阻塞,才能执行递达的操作。...4.核心转储的意义 一旦进程出现崩溃的情况,我们会想知道为什么会崩溃、在哪里崩溃等问题,所以OS为了方便调试,会将进程崩溃的上下文数据全部dump到磁盘中,用来支持调试。...quit); 16 printf("我是正常退出的\n"); 17 return 0; 18 } 六、SIGCHLD信号 子进程退出时,会向父进程发送17号信号SIGCHLD...的处理动作置为SIG_IGN,这样fork处理的子进程,在终止时会自动清理掉,不会通知父进程,也不会产生僵尸进程。...默认是收到信号就忽略处理,但是该等还是要等; 手动设置的SIG_IGN,子进程退出时发送给父进程的信号会被父进程忽略,但是子进程会被OS回收。 这两者是有区别的,含义不一样。

    26020

    linux spervisor监控进程,设置守护

    此外,rc.d脚本无法自动重新启动崩溃的进程,并且许多程序在崩溃时无法正常重新启动。Supervisord将进程作为其子进程启动,并且可以配置为在崩溃时自动重新启动它们。...它还可以自动配置为在自己的调用上启动进程。 Supervisord将进程作为子进程启动,因此它始终知道其子进程的真正上/下状态,并且可以方便地查询此数据。...它负责在自己的调用中启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出,以及生成和处理与子进程生命周期中的点相对应的“事件”。...从 supervisorctl,用户可以连接到不同的 supervisord进程(一次一个),获取由子进程控制的状态,停止和启动子进程,并获取supervisord的运行进程列表。...supervisor supervisorctl status :查看supervisor监管的进程状态 supervisorctl start 进程名 :启动XXX进程 supervisorctl stop

    2.6K40

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

    非exec加载程序的方式是:父进程睡眠,然后执行子进程,执行完后回到父进程,所以不会立即退出当前环境)所以为了保证进程安全,若要形成新的且独立的子进程,都会先fork一份当前进程,然后在fork出来的子进程上调用...当cp命令执行完毕,它将自己的退出状态码告知父进程,此次复制是成功还是失败,然后cp进程自己消逝掉,父进程bash被唤醒再次进入等待队列,并且此时bash已经获得了cp退出状态码。...17 当子进程中断或退出时,发送该信号告知父进程自己已完成,父进程收到信号将告知内核清理进程列表。...僵尸进程和 SIGCHLD 一个编程完善的程序,在子进程终止、退出的时候,会发送SIGCHLD信号给父进程,父进程收到信号就会通知内核清理该子进程相关信息。...在子进程死亡的那一刹那,子进程的状态就是僵尸进程,但因为发出了SIGCHLD信号给父进程,父进程只要收到该信号,子进程就会被清理也就不再是僵尸进程。

    1.7K20

    Nginx平滑升级源码分析

    4、向老的nginx进程发送QUIT信号,从容关闭 master进程收到QUIT信号后,将ngx_quit置为1 ? master进程接收到信号,从挂起状态恢复,继续执行 ?...6、子进程退出后,作为父进程的master进程会收到SIGCHLD信号 src/os/unix/ngx_process.c ?...387行 父进程收到SIGCHLD后将ngx_reap置为1, 437行 发现信号是SIGCHLD后执行ngx_process_get_status函数判断worker子进程是正常退出,还是异常退出 src...494-499行 如果发现worker子进程如果是正常退出的,会将exited置为1 master进程接收到信号,从挂起状态恢复,继续执行 ?...619 如果worker至今才是因为意外退出的,并且可以重启,则调用ngx_spawn_process重新启动一个worker子进程 642 如果有worker进程还在运行则live=1 如果全部的worker

    1.3K70

    Supervisor使用详解

    一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。...也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。...子进程配置文件路径:/etc/supervisord.d/ 注:默认子进程配置文件为ini格式,可在supervisor主配置文件中修改。...如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的 autorestart=false #这个选项是子进程启动多少秒之后...,此时状态如果是running,则我们认为启动成功了。

    73020

    systemd 使用教程【转】

    $ sudo systemctl restart apache.service# 杀死一个服务的所有子进程$ sudo systemctl kill apache.service# 重新加载一个服务的配置文件...Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程...Loaded行:配置文件的位置,是否设为开机启动 Active行:表示正在运行 Main PID行:主进程ID Status行:由应用本身(这里是 httpd )提供的软件当前状态 CGroup块:应用的所有子进程...simple(默认值):ExecStart字段启动的进程为主进程 forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程 oneshot:类似于simple...no(默认值):退出后不会重启 on-success:只有正常退出时(退出状态码为0),才会重启 on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 on-abnormal

    1.1K20

    supervisor安装使用

    Supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件...可以在一个配置文件中配置相关参数,包括Supervisord自身的状态,其管理的各个子进程的相关属性。配置文件一般位于/etc/supervisord.conf。...通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。...supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。...supervisor是所有进程的父进程,管理着启动的子进展,supervisor以子进程的PID来管理子进程,当子进程异常退出时supervisor可以收到相应的信号量。

    61310
    领券