linux编程之进程

进程:

1.进程的概念and创建一个进程
什么是程序?什么是进程?

程序是静态的概念,gcc xxx.c磁盘中就生成了pro文件叫做程序。进程是程序一次运行的活动。意思是程序跑起来就多了一个进程。

如何创建一个进程???

Int main()

{

pid_t pid1;

Pid_t pid2;

Pid1=getpid();

Printf(“this is pid num=%d”,pid1);

pid2=fork()

If(pid2>0){

Printf(“this is father pid %d\n”,pid2);

}else if(pid2==0){

Printf(“this is child pid %d\n”,pid2);

}else if(pid2==-1){

Printf(“print pid failed\n”);

}

}

 

Fork和vfork有什么区别?

关键区别1:vfork直接使用父进程存储空间,不拷贝。

关键区别2:vfork保证子进程先运行,当子进程调用exit推出后,父进程才执行。

  1. 进程的退出

正常退出:1.main函数调用return

2.进程调用exit(),标准c库

3.进程调用_exit()或者_Exit()属于系统调用

补充:进程最后一个线程返回;最后一个线程调用pthread_exit

异常退出:1.调用abort 2.当进程收到某些信号时,3.最后一个线程对取消请求做出响应。

程序代码:

Int main()

{

Pid_t pid;

If(pid>0){

 Printf(“this is father pid\n”);

 for(a=0;a++;a<10){

Printf(“%d\n”,a);

 

}

}else(pid<0){

  for(a=0;a++;a<3){

Printf(“%d\n”,a);

 

}

  exit(1)

}

}

 

父进程等待子进程退出

创建子进程的目的是为了让子进程干活儿,干活分为两种状态干完和没干完。干完程序退出exit(0or1or2)没完abort。

 

进程等待

为什么要等待?

  1. 子进程退出状态不被收集。变成僵尸进程。2.父进程等待子进程退出,并且收集子进程的状态

代码:

Int main()

{

Pid_t pid;

int cnt =0;

int status=10;

pid=fork();

if(pid>0){

wait(&status);

printf(“child quit ”);

while(1){

  printf(“cnt=%d\n”,cnt);

  printf(“this is father print pid=%d\n”,getpid());

  Sleep(1);

}

}else if(pid==0){

  while(1){

     Printf(“this is child print pid=%d\n”,getpid());

     Sleep(1);

   cnt++;

    if(cnt==5){

       exit(3);

}

}

}

}

 

对于waitpid参数中pid参数作用如下:

Pid==-1 等待任一子进程。就这方面而言,waitpid和wait等效

Pid>0等待其进程id与pid相等的子进程

Pid==0等待其组id等于调用进程组任一子进程

Pid<-1等待其组id等于pid绝对值任一子进程

 

system和execl族函数

int main()

{

pid_t pid ;

Int data=10;

While(1){

   Printf(“please input a data\n”);

   Scanf(“%d”,&data);

   If(data==1){

       Int  fdsrc;

       Pid =fork();

       If(pid>0){

          Wait(NULL);

}else if(pid==0){

   System(“./changedata config .text”);

}else{

   Printf(“wait od nothing \n”);

}

}

 

}

 

return 0;

}

 

execl族函数的用法

把system()换成execl(“./changdata”,”changedta”,”config.text”,NULL)

显然execl函数有点麻烦。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值