您的位置:首页 > 其它

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

2009-03-23 21:10 225 查看
进程创建:

不同的操作系统创建进程的方式不尽相同,对于传统 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时,对于父进程并没有影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: