进程操作


Linux进程:

        进程是一个动态的实体,是程序的一次执行过程。进程是操作系统资源分配的基本单元。进程与程序的区别在于 进程是动态的,程序进静态的;进程是运行中的程序,程序是一些保存在硬盘上的可执行的代码。

        为了能让计算机在同一时间执行更多任务,在进程内部又划分了许多线程。线程基本上不拥有系统资源,它与同属于一个进程的其他线程共享进程拥有的全部资源

创建进程:

        系统调用fork()是创建一个新进程的唯一方法,除了极少数以特殊方式创建的进程,如init进程。创建一个子进程之后,父子进程争夺CPU,强到CPU者执行,另一个被挂起。如果想要父进程等待子进程执行完毕后再继续执行,可以在 fork 操作后调用 wait 或 waitpid 。子进程在被 fork 之后可以通过调用 exec 函数执行其他程序。

       fork 函数有两个返回值,一个是父进程调用 fork 后 返回的是子进程的 ID;另一个是子进程中 fork 函数的返回值,该返回值为0,

如果fork 调用失败,返回 -1 。如:

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
    pid_t pid;
    puts("Process Creation Study\n");
    pid=fork();
    switch(pid)
    {
	case 0:
	    printf("Child process is running,CurPid is %d,ParentPid is %d\n",pid,getpid());
	    break;
	case -1:
	    perror("Process creation failed \n");
	    break;
        default:
	    printf("Parent process is running,ChildPid is %d ,ParentPid is %d\n",pid,getpid());
	    break;
    }
    exit(0);
    return 0;
}

#include <sys/types.h>

基本系统数据类型

是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。linux编程中经常用到的头文件。

fork 和 vfork 区别

      vfork 也可以用来创建进程,二者异同点如下:

1.vfork 和 fork 一样都是调用一次,返回两次;

2.使用fork创建进程,子进程只是完全复制父进程的资源,子进程独立与父进程。而使用 vfork 创建子进程时,子进程共享父进程的地址空间,

   即子进程完全运行于父进程的地址空间上。子进程对该地址空间中任何数据的修改同样为父进程所见。

3. fork 创建子进程时,哪个进程先运行取决于系统的调度算法。而 vfork 创建进程时,保证子进程先运行,当它调用 exec 或 exit 之后,父进程

    才可以被调度运行。如果在调用 exec 或 exit 之前子进程要依赖父进程的某个行为,就会导致死锁。















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值