进程控制

每个进程都有一个唯一的正数 进程ID  getpid函数返回调用进程的PID getppid函数返回他的父进程的PID.

#import <stdio.h>
#include <zconf.h>


int main(int argc, char **argv){

    fprintf(stdout,"%d\n",getpid());
    
    fprintf(stdout,"%d\n",getppid());
    return 0;
}

进程总是三种状态

1.运行

2. 停止

3.终止


exit 函数以status推出状态来终止进程(另一种设置退出状态的方法是从主程序中返回一个整数)

#include <cstdlib>


int main(int argc, char **argv){

    exit(0);
    return 0;
}


父进程通过fork函数来创建一个新的子进程

pid_t fork(void)  在父进程返回子进程的PID 子进程返回0 出错返回-1          



#include <zconf.h>
#import <stdio.h>

int main(int argc, char **argv){

    if(fork()==0){
        printf("this fork\n");
    }
    printf("end \n");
    return 0;
}


子进程的到与父进程用户级虚拟地址空间相同的一分拷贝,共享父进程打开的文件描述符。

区别是他们的  PID不同,fork()函数只会拷贝调用前的数据,之后的不受干涉

1. 调用一次,返回两次。

2. 并发执行。

3.相同的但是独立的地址空间

4.共享文件


#include <zconf.h>
#import <stdio.h>
#include <cstring>
#include <cerrno>
#include <cstdlib>

int main(int argc, char **argv){

    int child_pid;
    if((child_pid=fork())<0){
        fprintf(stderr,"%s",strerror(errno));
        exit(1);
    }
    if(child_pid==0){
        fprintf(stdout,"child PID= %d\n",getpid());
        fprintf(stdout,"parent PID= %d\n",getppid());
        exit(0);
    }

    fprintf(stdout,"main  PID= %d\n",getpid());


}

>>

main  PID= 27327
child PID= 27328
parent PID= 27327


fork()函数只会拷贝调用前的数据,之后的不受干涉


#include <zconf.h>
#include <stdio.h>
#include <cstring>
#include <cerrno>
#include <cstdlib>

int main(int argc, char **argv) {

    int x = 1;

    int child_fd;
    if ((child_fd = fork()) < 0) {
        fprintf(stderr, "err:%s", strerror(errno));
    }

    if (child_fd == 0) {
        x++;
        printf(" child x:%d \n", x);
    }

    printf(" main x:%d \n", x++);

}
>>

main x:1 

 child x:2 

 main x:2 

回收子进程

当一个进程由于某种原因退出时,内核并不是立即把他从系统清除,相反,进程被保持在一种已经终止的状态,

直到被它的父进程回收。当父进程回收子进程时,内核将子进程退出的状态传递给父进程然后抛弃已终止的子进城,从这个时候开始,该进程就不存在了。一个终止但还没回收的进程称为僵死进程。



如果















哦哦u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值