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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值