exec函数族

1.一个问题

当fork的时候,前面提到过fork是复制进程当前的运行环境,创造出一个和他一模一样的进程,那么当我们在终端上创建一个进程的时候为什么创建的不是一个终端呢?

2.exec函数族 PID不会变

①fork函数创建子进程后,子进程一般要调用exec函数以执行另外一个程序。
当进程调用一个exec函数的时候,子进程执行的程序会被替换为新程序,新程序从main函数开始执行,而且exec不创建新的进程,所以不会改变进程号。
exec只是用磁盘上的新程序来代替当前进程的正文段,数据段,堆,栈

NAME
       execl, execlp, execle, execv, execvp - 执行某个文件

总览 (SYNOPSIS)
       #include <unistd.h>

extern char **environ;

int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg , ..., 
char * const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);

描述 (DESCRIPTION)
       exec  系列  函数 用 新的 进程 映象 置换 当前的 进程 映象

使用过程中一定要注意fflush使用

3. demo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main()
{
        puts("Begin():");

        execl("/usr/bin/date", "date", "+%s", NULL);
        perror("execl()");
        exit(1);




        puts("End()");

        return 0;
}

在这里插入图片描述
然后我们进行输出重定向
在这里插入图片描述
所以要刷新缓冲

4.另外一个demo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>



int main()
{
        pid_t pid;

        puts("Begin()");
        fflush(NULL);

        pid = fork();
        if(pid < 0)
        {
                perror("fork()");
                exit(1);
        }

        if(0 == pid)
        {
                execl("/usr/bin/date", "date", "+%s", NULL);
        }

        wait(NULL);

        puts("End()");

        return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值