Chinaunix

标题: 问一下子进程是否一定要等到父进程停止以后才停止? [打印本页]

作者: channel5    时间: 2005-10-09 11:39
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
我用下面这个程序来测这个, 但是得到的结果是子进程每一次都在父进程
停止以后才停止

判断子进程是否消亡用的是上面楼主的方法, 不知道管用不管用

#include <unistd.h>;
#include <sys/types.h>;
#include <sys/uio.h>;
#include <stdio.h>;
#include <strings.h>;
#include <errno.h>;

main ()
{
  pid_t pid;
  int fd[2];
  int rpid;
  char buf[10];

  int i;

  if(pipe(fd) == -1)
    perror("Failed to create pipe!\n";
  pid=fork();

  if (pid < 0)
    printf("error in fork!";
  else if (pid == 0) {
    rpid = getpid();
    printf("i am the child process, my process id is %d\n", rpid);
    sprintf(buf, "%d", rpid);
    write(fd[1], buf, sizeof(buf));
  }
  else {
    printf("i am the parent process, my process id is %d\n",getpid());
    read(fd[0], buf, sizeof(buf));
    rpid=atoi(buf);
    printf("I accept the process id of my child, which is %d\n", rpid);
    for(i=0; i<10000; i++);
    if(kill(rpid, 0) == -1 && errno == ESRCH)                  
      printf("Child process already dead!\n";
    else
      printf("Child process still alive!\n";
  }
}


顺便附一下程序结果

>; cc -o fp forkpipe.c
>; ./fp
i am the parent process, my process id is 88179
i am the child process, my process id is 88180
I accept the process id of my child, which is 88180
Child process still alive!
作者: 依赛特小子    时间: 2005-10-09 11:51
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
子进程想停止就停止,就像人可以自杀,但不可以自己生自己,子进程的创建要有父进程才可以!!
作者: xiaonanln    时间: 2005-10-09 12:01
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
子进程Exit后,父进程还没有wait过,所以应该是Zombie,而不是not exists
作者: gooderfeng    时间: 2005-10-09 12:20
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
僵死进程还占用原来的pid,你kill僵死进程的时候,还是存在的,在父进程里面waitpid之后才能把进程的所有资源全部回收
作者: openX    时间: 2005-10-09 12:43
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
[quote]原帖由 "gooderfeng"]僵死进程还占用原来的pid,你kill僵死进程的时候,还是存在的,在父进程里面waitpid之后才能把进程的所有资源全部回收[/quote 发表:

同意!
作者: openX    时间: 2005-10-09 12:55
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
子进程退出时的一个处理函数:

static void sig_child(int signo)
{
        int status;
        int pid;
        if (signo == SIGCHLD)
        {
                if (pid = waitpid( -1, &status, 0))
                {
                        。。。。。
                }
        }
}
作者: gooderfeng    时间: 2005-10-09 13:04
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
我的程序在sco(5。05)不知道为什么我kill掉的子进程不成功,父进程收不到子进程退出的信号。
作者: albcamus    时间: 2005-10-09 13:44
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
>;>;不知道为什么我kill掉的子进程不成功
这句话是什么意思?kill子进程杀不掉吗?如果是这个意思,那就对了,因为signal的递送是发生在进程从内核态返回到用户态的时候的。Zombie不会返回到用户态,所以无法发送signal给它。
作者: gooderfeng    时间: 2005-10-09 14:00
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
原来是这样谢谢,一直没找到问题所在
作者: channel5    时间: 2005-10-09 14:01
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
谢谢gooderfeng和openX
作者: gooderfeng    时间: 2005-10-09 14:04
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
那怎么样能释放进程号,现在当我kill掉进程的时候,它就成僵死了,我没办法处理。
作者: channel5    时间: 2005-10-09 14:11
标题: 问一下子进程是否一定要等到父进程停止以后才停止?
关掉shell好象可以杀死所有的zombie




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2