赞
踩
在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程
进程调用fork,当控制转移到内核中的fork代码后,内核做:
当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程
int main(void)
{
pid_t pid;
printf("Before: pid is %d\n", getpid());
if ((pid = fork()) == -1)
perror("fork()"), exit(1);
printf("After:pid is %d, fork return %d\n", getpid(), pid);
sleep(1);
return 0;
}
运行结果
Before: pid is 43676
After:pid is 43676, fork return 43677
After:pid is 43677, fork return 0
void _exit(int status);
void exit(int status);
int main()
{
printf("hello");
exit(0);
}
// 运行结果:hello
int main()
{
printf("hello");
_exit(0);
}
// 运行结果:(空)
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充
status****不能简单的当作整形来看待,可以当作位图来看待(只研究status低16比特位)
由此,可知:
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[]);
int execve(const char *path, char *const argv[], char *const envp[]);
函数名 | 参数格式 | 是否带路径 | 是否使用当前环境变量 |
---|---|---|---|
execl | 列表 | 不是 | 是 |
execlp | 列表 | 是 | 是 |
execle | 列表 | 不是 | 不是,须自己配置环境变量 |
execv | 数组 | 不是 | 是 |
execvp | 数组 | 是 | 是 |
execve | 数组 | 不是 | 不是,须自己配置环境变量 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。