马克斯网站建设,济南网站建设公司制作,是怎么回事儿,网站开发的微端是什么1、功能#xff1a; *让父子进程来执行不相干的操作 *能够替换进程地址空间的代码.text段 *执行另外的程序#xff0c;不需要创建额外的的地址空间 *当前程序中调用另外一个应用程序 2、执行目录下的程序#xff1a; *指定执行目录下的程序 int execl(const char *path,…1、功能 *让父子进程来执行不相干的操作 *能够替换进程地址空间的代码.text段 *执行另外的程序不需要创建额外的的地址空间 *当前程序中调用另外一个应用程序 2、执行目录下的程序 *指定执行目录下的程序 int execl(const char *path, const char *arg, ... /* (char *) NULL */); 参数功能 /* path : 要执行程序的路径最好是绝对路径 变参arg : 要执行的程序需要的参数 第一位arg: 占位一般与程序名一样 后边的arg: 命令的参数 参数写完之后null 一般执行自己写的程序 */ 2.1例子
执行ls -l程序 #include stdio.h
#include sys/types.h
#include unistd.hint main()
{pid_t pid;pid fork();int i 0;if(pid 0){printf(fork 错误\n);}else if(pid 0)printf(子进程pid%d,父进程ppid %d\n,getpid(),getppid());else if(pid 0){printf(这是父进程pid%d\n,getpid());execl(/bin/ls,ls,-l,NULL);}for(i 0;i 4;i)printf(i %d\n,i);
}运行结果 2.2执行用户自己的程序的例子 #include stdio.h
#include sys/types.h
#include unistd.hint main()
{pid_t pid;pid fork();int i 0;if(pid 0){printf(fork 错误\n);}else if(pid 0)printf(子进程pid%d,父进程ppid %d\n,getpid(),getppid());else if(pid 0){printf(这是父进程pid%d\n,getpid());execl(/bin/ls,ls,-l,NULL);}for(i 0;i 4;i)printf(i %d\n,i);
}结果 PS在子进程中利用exec族函数去执行其它程序时子进程以下的文本子进程不执行 3.执行PATH环境变量能够搜索到的程序 执行PATH环境变量能够搜索到的程序 int execlp(const char *file, const char *arg, ... /* (char *) NULL */); /* file :执行的命令名字 第一个arg:占位 后边的arg:命令的参数 参数写完之后NULL 3.1执行系统自带的程 序/bin/xx */ ps aux #include stdio.h
#include sys/types.h
#include unistd.hint main()
{pid_t pid;pid fork();int i 0;if(pid 0){printf(fork 错误\n);}else if(pid 0){printf(子进程pid%d,父进程ppid %d\n,getpid(),getppid());execlp(ps,ps,aux,NULL);}else if(pid 0){printf(这是父进程pid%d\n,getpid());}for(i 0;i 4;i)printf(i %d\n,i);
}
~ 结果 exec族函数返回值 如果函数运行成功不返回 如果执行失败打印错误信息退出子进程 它们的一般规律如下 l (list) 命令行参数列表 p (path) 搜素 file 时使用 path 变量 v (vector) 使用命令行参数数组 e (environment) 使用环境变量数组 , 不使用进程原有的环境变量设置新加载程序运行的环境变量