fork()
函数 用于创建一个与父进程完全相同的子进程。子进程是父进程的副本,拥有自己的地址空间、文件描述符和资源,但共享父进程的部分信息,如打开的文件描述符、环境变量等。fork()
函数的原型是pid_t fork(void);
,它返回两次,一次在父进程中返回子进程的PID,一次在子进程中返回0。
#include
#include
int main(void)
{
pid_t pid;
pid = fork();
if (pid < 0){
printf("fork is error \n");
return -1;
}
//父进程
if (pid > 0)
{
printf("This is parent,parent pid is %d\n", getpid());
}
//子进程
if (pid == 0)
{
printf("This is child,child pid is %d,parent pid is %d\n", getpid(), getppid());
}
return 0;
}
exec()
函数 在当前进程中执行一个新的程序。它会替换当前进程的代码和数据段,但保留原有的堆和栈。exec()
函数的原型是int exec(const char *path, char *const argv[]);
,它用于执行一个新的程序。参数path
指定要执行的程序路径,参数argv
是一个指向字符指针数组的指针,用于传递给新程序的参数。
#include
#include
int main() {
char *argv[] = {"ls", "-l", NULL};
exec("ls", argv);
return 0;
}
exec()
函数执行了ls
命令,并传递了一个参数-l
。
完成后再次输入查找命令“ps aux | grep a.out”,没有发现 3179 号进程。