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 ,除此之外所有的进程都有父进程新的进程不是被全新的创建,通常是从一个原有的进程进行复制或者克隆的。