zoukankan      html  css  js  c++  java
  • fork();

    僵死进程: 父进程没有等待子进程,wait() 子进程会变成僵死进程。

    int main(int arg, char *args[])
    {
     
      pid_t pid = fork();//调用fork产生一个子进行
      int status;
      if (pid == -1)
      {
      printf("fork failed ");
      return 0;
      }
      if (pid == 0)//子进程调用execve,执行ls -l命令
      {
              exit(0);//子进程退出了,变成了僵死进程。

      }
      else
      {

              printf("father exit");

               //wait(&status);//阻塞调用,直到子进程退出,wait才返回

              sleep(10);//没有等待子进程状态。

         return 0;//父进程退出
      }
    }

    孤儿进程: 父进程退出子进程还没有退出,会由init进程接管变成孤儿进程。

    int main(int arg, char *args[])
    {
      close(STDOUT_FILENO);//关闭标准输出
      open("/dev/pts/2", O_WRONLY);//打开"/dev/pts/2",做为标准输出
      pid_t pid = fork();//调用fork产生一个子进行
      int status;
      if (pid == -1)
      {
      printf("fork failed ");
      return 0;
      }
      if (pid == 0)//子进程调用execve,执行ls -l命令
      {
      char *args[] = { "/bin/ls", "-l", NULL };
      execve("/bin/ls", args, NULL);

      }
      else
      {

      return 0;//父进程退出
      }
    }


    //父进程等待子进程退出的代码
    int main(int arg, char *args[])
    {
      pid_t pid = fork();//调用fork之后会有两个进程
      int status;
      if (pid == 0)
      {
        printf("child begin ");
        sleep(5);
        printf("child end ");
        return -1;
      }

      if (pid > 0)
      {
        printf("parent begin ");
        wait(&status);//阻塞调用,直到子进程退出,wait才返回
        printf("child return = %d ", WEXITSTATUS(status));
        printf("parent end ");
      }

      return 0;
    }

    //僵死进程
    //父进程没有调用wait,子进程就退出了,这个时候子进程就成了僵死进程

    进程退出的5种方式:

    return 跟exit 在主函数main中效果是一样的,只是在子函数中,才有区别,子函数中return只是退出子函数,exit才是退出进程。

    exit  在main函数中跟return是一样的,只是在子函数中不相同。

    _exit

    abort  异常退出。生成一个core.xxx文件  (ulimit -c unlimited)  

    信号  kill(pid , SIGKILL);

  • 相关阅读:
    springboot Quartz 定时任务工具类
    java 发邮件 代码
    spring boot 整合 shiro 权限框架
    java 读取xml
    flowable 报错 Waiting for changelog lock....
    微服务 springcloud Alibaba 阿里组件 项目源码
    Java 读取汉字拼音
    syslog how to
    c++ 字符串总结
    aptget 总结
  • 原文地址:https://www.cnblogs.com/yuankaituo/p/4341436.html
Copyright © 2011-2022 走看看