linux 进程创建、关闭、回收

提示:全文仅是我(初学者)的笔记,可能有较多错误,请辩证观看,有错误请帮忙指出,谢谢。

1、进程创建:

  • pid_t fork(void);

创建进程特性:

  1. 创建新的新的进程,失败时返回1;
  2. 成功时,父进程返回子进程的进程号,子进程返回自己的进程号;
  3. 通过fork的返回值区分是父进程还是子进程;
  4. 进程创建代码:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(){

        pid_t pid;

        pid = fork();

        if (pid < 0){
        
                perror("fork");
                return -1;

        }else if (pid == 0){
                
                printf("chlid process: my pid is  %d\n", getpid());
        
        }else {
        
                printf("parent process: my pid is %d\n", getpid());
        }
                                                             
        return 0;
}

父子进程与子进程的关系特性:

  • 子进程继承了父进程的内容;
  • 父、子进程有独立的地址空间,互不影响;
  • 若是父进程先结束,子进程成为孤儿进程,被init进程收养,子进程变为后台进程;
  • 若是子进程先结束,父进程如果没有及时回收,子进程变为僵尸进程。

产生进程函数可以循环调用

  • 第一次循环父进程产生一个子进程,第二次循环,父进程又产生一个新的子进程,子进程产生孙进程,此时总共共有四个进程。依次产生,每个子进程在下一轮中也能产生下一代进程。

2、进程关闭

void exit(int status);
void _exit(int status);

结束当前的进程,并将status返回,
exit结束进程时会刷新缓流区,exit在程序执行后在再刷新,而_exit()不给程序执行的时间。

3、进程的回收

进程回收

  • 子进程由父进程回收;
  • 孤儿进程由init进程回收;
  • 若没有及时回收,会出现僵尸进程。

进程回收–wait

  • #include <unistd.h>
  • pid_t wait(int *status)
  • 成功回收时,返回子进程的进程号,失败时返回EOF;
  • 若子进程一直没有结束,父进程一直阻塞
  • 有多个子进程,哪个先结束,就先回收哪个
  • status指定保存子进程返回值和结束方式的地址
  • status为NULL,表示直接释放子进程PCB,不接受返回值。
 printf("child process: my pid is %d\n", getpid());
 wait(&status);
 printf("this process is dead, ret = %d\n", status);

进程回收–waitpid

  • #include <unistd.h>
  • pid_t waitpid(pid_t pid, int *status, int option)(pid=-1时表示任意的子进程);
  • 成功时返回回收的子进程的pid或者0,失败时返回EOF
  • pid可用于指定回收哪个子进程或者任意子进程
  • status指定用于保存子进程的返回值和结束方式的地址
  • option指定回收方式,0或者WNOHANG (0表示子进程没有结束时,父进程一直阻塞,WNOHANG在没有要回收时父进程直接跳出)
  printf("child process: my pid is %d\n", getpid());
  wait(pid, &status, 0);
  printf("this process is dead, ret = %d\n", status);

~~未完

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值