linux子进程崩溃父进程如何得知并重启子进程,子进程崩溃父进程如何得知并重启子进程...

子进程崩溃父进程如何得知并重启子进程

发布时间:2010-11-30 16:00:14来源:红联作者:skywing

大家好,我有一个程序,主进程中fork出两个进程,子进程循环执行任务, 我想做一个控制,在子进程崩溃时,让父进程获取子进程一个信号,并重启一个子进程,保证一直有两个子进程在工作。

我使用了signal(SIGCLD, sig_process);

sig_process函数如下:

static void sig_process(int signum)

{

int pid_t,pstatus,acsid;

switch( signum )

{

case SIGCHLD:

pid_t = wait( &pstatus );

if(pid_t > 0)

{

for( acsid = 1 ; acsid <= SHMINFO->EPOLLNUM ;acsid++ )

{

printf("SHMINFO->SU_EPOLLS[%d-1].pid=%d,pid_t=%d\n",acsid,SHMINFO->SU_EPOLLS[acsid-1].pid,pid_t);

if( SHMINFO->SU_EPOLLS[acsid-1].pid == pid_t )

{

printf("set the acs%d state\n",acsid);

P_Action(SEM_I_ID, 0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程中,可以使用`waitpid`函数来等待进程的结束,然后重新动一个新的进程。具体的步骤如下: 1. 在进程中使用`fork`函数创建一个进程。 2. 在进程中使用`execl`函数执行需要运行的程序。 3. 在进程中使用`waitpid`函数等待进程结束。 4. 如果进程正常结束,则使用`WIFEXITED`宏判断是否正常退出;如果进程被信号终止,则使用`WIFSIGNALED`宏判断是否被信号终止。 5. 如果进程正常结束或者被信号终止,则在进程中重新使用`fork`函数创建一个新的进程并执行需要运行的程序。 代码示例: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t pid; int status; while (1) { pid = fork(); if (pid == -1) { perror("fork"); exit(EXIT_FAILURE); } else if (pid == 0) { execl("/path/to/program", "program", NULL); perror("execl"); exit(EXIT_FAILURE); } else { waitpid(pid, &status, 0); if (WIFEXITED(status)) { printf("Child process exited with status %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("Child process terminated by signal %d\n", WTERMSIG(status)); } } } return 0; } ``` 在这个示例中,进程会不断地创建进程并等待进程结束。如果进程正常结束,则在进程中重新创建一个新的进程并执行需要运行的程序。如果进程被信号终止,则在进程中也重新创建一个新的进程并执行需要运行的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值