exec
父进程利用fork函数创建子进程以后,子进程往往需要调用一种exec函数,执行的程序完全替换为新程序,而新程序从main函数开始执行,exec函数并不创建新进程,当前进程的ID完全没变,不过以一个全新的程序代替了当前进程的正文,数据空间,堆,栈。
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char *cmdstring)
{
pid_t pid;
int status;
if (cmdstring == NULL)
return(1); /* always a command processor with UNIX */
if ((pid = fork()) < 0)
{
status = -1; /* probably out of processes */
}
else if (pid == 0)
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
_exit(127); /* execl error */
}
else
{
while (waitpid(pid, &status, 0) < 0)
{
if (errno != EINTR) {status = -1; break;}
}
}
return(status);
}以上只是写在unix系统下中.c文件中的一个函数,下面写个测试system函数的程序
#include "apue.h"
#include <sys/wait.h>
int main(void)
{
int status;
if ((status = system("date")) < 0)
err_sys("system() error");
pr_exit(status);
if ((status = system("nosuchcommand")) < 0)
err_sys("system() error");
pr_exit(status);
if ((status = system("who; exit 44")) < 0)
err_sys("system() error");
pr_exit(status);
exit(0);
}就可以得到这些命令中程序所应该输出的结果