关于进程控制和管理的几点

  进程创建:


               不同的操作系统创建进程的方式不尽相同,对于传统 UNIX系统中是这样处理的:父进程使用fork()创建子进程。Linux保留传统的fork()创建子进程;创建后,父子进程存在以下关系:调用一次,返回两次,分别返回父子进程;父子进程是独立的进程,可以并发执行;父子进程具有独立的地址空间,如果父子进程改变某个变量的值,子进程将不会看到这个变化,反之 亦然,因为 父子进程在相互独立的地址空间中并发执行。

               另一个系统调用是vfork(),它允许子进程借用父进程的地址空间,父进程将被阻塞至子进程执行execve()或exit(),向父进程归还地址空间并唤醒它。


[程序:fork()函数相关]


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
   pid_t result;
   result = fork();
   int newret;
   int i=1;   //用于测试父子进程之间的独立性
   if(result == -1)
   {
      perror("创建子进程失败!");
      exit;
   }
   else if(result == 0)
   {
      printf("返回傎是:%d/n,i的值是:%d/n说明是子进程:/n此进程的进程号是:%d/n此进程的父进程是:%d/n",result,i+1,getpid(),getppid());
      newret = system("ls -l");
   }
   else
   {
       sleep(10);   //休眠10秒
       printf("返回傎是:%d/n,i的值是:%d/n说明是父进程:/n此进程的进程号是:%d/n此进程的父进程是:%d/n",result,i,getpid(),getppid());
       newret = system("ls -al");    
   }
}

 

          程序中,先用fork()创建一个进程。再分别显示子/父进程的进程号和其父进程号,当result返回0时说明是新创建的进程号,而当result返回一个进程号时(不是-1和0),说明是父进程。而在子进程中的i自加1时,对于父进程并没有影响。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值