Linux-进程的产生

1.获取进程号

pid_t getpid(void);  //获得当前进程号
pid_t getppid(void);  //获得父进程进程号

2.进程复制 fork

fork() 是以写实复制实现,执行一次,返回两次,父进程返回子进程 ID ,子进程返回 0,失败返回 -1

pid_t fork(void);
int pid=fork();
if(-1==pid){
    //创建失败
}else if(pid==0){
    //子进程代码
}else{
    //父进程代码
}

3.system() 调用方式

system() 函数调用 shell 的外部命令在当前进程中开始一个新的进程,当前进程阻塞,直到command命令执行完毕

成功返回进程状态值,失败返回 -1 ,当不能执行时返回127

int system(const char *command);
int ret = system("ping www.baidu.com -c 2");

4.进程执行 exec() 函数系列

exec() 族函数会用新进程代替原有的进程,新进程的 PID 与原进程 PID 相同

常用操作:在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。

fork是分身,execve是变身。

int execve(const char *filename, char *const argv[ ], char *const envp[ ]);
char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};   
char *envp[ ]={"PATH=/bin", NULL}   
execve("/bin/ls", argv, envp);   

5.所有用户态进程的产生进程 init

初始进程 init ,除此之外所有的进程都有父进程新的进程不是被全新的创建,通常是从一个原有的进程进行复制或者克隆的。




猜你喜欢

转载自blog.csdn.net/bobbymly/article/details/79323585