在Linux活着Unix下,每个进程都有一个唯一的,整数形式的进程标识符。
通过fork系统调用可以创建新进程。新的进程通过复制原来进程的地址空间而成。
这种机制允许父进程与子进程能够方便的进行通信。父进程与子进程都继续执行位于系统调用fork()之后的指令。不同的是,对于子进程,fork完成之后返回值为0,对于父进程fork完成之后返回值为子进程的pid,是一个非零整数。
通常,在系统调用fork之后,一个进程会使用系统调用函数exec(),来取代进程的内存空间。exec()将二进制文件装入内存,清除原来exec()的内存映射,并开始只执行。
以下,用C程序在linux下,实现以上的论述。主要功能为,父进程创建了一个子进程,子进程用于执行ls命令,列出特定目录下的内容。父进程通过调用wait()函数,等待子进程完成操作,最后使用exit()函数表示父进程结束。
######################一些系统调用函数的说明####################
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>//execlp() relation
#include <sys/wait.h>//wait() relation
#include <stdlib.h>//exit() relation
int main( int argc, char *argv[] )
{
pid_t pid;
/*for a child process*/
pid = fork();
/*create process failed*/
if( pid < 0)
{
fprintf(stderr,"Fork Failed");
exit (-1);
}
/*create a child process success*/
else if( pid == 0 )
{
printf("*******come into child process!!!******\n\n");
execlp( "ls", "ls", "/", (char *)0 );
}
/*parent process*/
else
{
/*parent will wait for the child to complete*/
wait(NULL);
printf("\n*********Child Complete,child's pid is %d **********\n\n",pid);
exit(0);
}
return 0;
}
转载于:https://blog.51cto.com/987180/1280972