—多进程—
一个进程,包括代码、数据和分配给进程的资源。在linux操作系统中 , fork()函数通过系统调用可以创建一个与原来进程几乎完全相同的进程。
函数
fork 创建一个进程
包含头文件:
#include <sys/types.h>
#include <unistd.h>
原型:
pid_t fork(void);
返回值:
成功则返回父进程
0 为子进程
-1 为错误 有 errno
execl 变成其他函数
包含头文件:
#include <unistd.h>
原型:
int execl(const char *pathname, const char *arg, ... /* (char *) NULL */);
其中:
pathname 为想进入的路径,一般在Linux下是/bin/xxx,
arg 传入参数 从0开始 , 最后一个参数必须是NULL。
举例:
比如我要使用cp这个命令,即我写一个函数,里面用到了execl函数,然后我调用这个函数,这个函数就会使用cp出我要的东西来,原命令是:cp xxx.c /led/ 则:execl(“/bin/cp”, “cp”, “xxx.c”, “/led/“, NULL ); 最后一个参数必须为NULL,用来说明参数用完了,否则将会出问题。
wait 回收子进程
包含头文件:
#include <sys/types.h>
#include <sys/wait.h>
原型:
pid_t wait(int *wstatus);
其中:
wstatus 为 回收状态 不想要状态则NULL
返回值:
错误 -1 有 errno .
代码实例
#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
cout<<getpid()<<":Begin!"<<endl;
//fflush(NULL); //**!!刷新流** 否则begin会打印两次//
pid = fork();
if(pid <0)
{
perror("fork()");
exit(1);
}
if(pid == 0) //child
{
execl("/bin/date","date","+%s",NULL);
perror("execl():");
exit(1);
}
//parent
wait(NULL);
cout << getpid()<< ":END!"<<endl;
exit(0);
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com