linux多进程

  1. —多进程—
    1. 函数
      1. fork 创建一个进程
      2. execl 变成其他函数
      3. wait 回收子进程
    2. 代码实例

—多进程—

​ 一个进程,包括代码、数据和分配给进程的资源。在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

×

喜欢就点赞,疼爱就打赏