execl函数使用说明:
#include <unistd.h>
#include <stdio.h>
int main()
{
for(int i = 0; i < 10; i++)
{
printf("i == :%d\n", i);
}
pid_t pid = fork();
if(pid == 0)
{
printf("child:%d father:%d\n",getpid(), getppid());
/* 替换子进程的.txt代码段为./hell的可执行程序 */
execl("./hell", "a.out", NULL);
perror("execl");
exit(1);
}
for(int i = 0; i < 3; i++)
{
/* 子进程不会执行该代码段 */
printf("father working:%d\n", getpid());
}
usleep(1000);
return 0;
}
通过echo $PATH 命令可以查看环境变量路径。
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
uint8_t total = 3;
uint8_t i = 0;
for(i = 0; i < total; i++)
{
pid_t pid = fork();
if(pid == 0)
{
break;
}
}
if(i == 0)
{
printf("i = 0, pid:%d\n", getpid());
execlp("ls","ls", NULL);
perror("execlp ls");
exit(1);
}
else if(i == 1)
{
printf("i = 1, pid:%d\n", getpid());
execl("./hell", "hell", NULL);
}
else if(i == 2)
{
printf("i = 2, pid:%d\n", getpid());
printf("My name is Linux\n");
exit(2);
}
else
{
int status;
pid_t pid;
while(1)
{
pid = wait(&status);
if(pid == -1)
{
break;
}
if(WIFEXITED(status))
{
printf("id:%d kill status %d\n", pid, WEXITSTATUS(status));
}
if(WIFSIGNALED(status))
{
printf("id:%d kill signal:%d\n",pid, WTERMSIG(status));
}
}
}
return 0;
}