首页 / LINUX / linux 系统编程 fork
linux 系统编程 fork
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux 系统编程 fork,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1674字,纯文字阅读大概需要3分钟。
内容图文
pid_t fork(void);
返回值:
失败 -1
成功,两次返回
父进程返回子进程id
子进程返回 0
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);//获得当前进程的id
pid_t getppid(void);//获得父进程的id
父子相同处: 全局变量、.data、.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式…
父子不同处: 1.进程ID 2.fork返回值 3.父进程ID 4.进程运行时间 5.闹钟(定时器) 6.未决信号集
父子进程间遵循读时共享写时复制的原则。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(){
printf("start");
pid_t pid = fork();
printf("end")
return 0;
start打印两次
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int var = 34;
int main(void)
{
pid_t pid;
pid = fork();//从这里开始,子进程复制了下面的代码,单独运行,在子进程里pid是0,在父进程里pid是子进程的id
if (pid == -1 ) {//如果失败的话
perror("fork error");
exit(1);
} else if (pid > 0) {//父进程会执行这里
sleep(2);//等待子进程的结束,不然子进程会没有父进程
var = 55;//子进程和父进程不共享全局变量
printf("I'm parent pid = %d, parentID = %d, var = %d\n", getpid(), getppid(), var);
} else if (pid == 0) {//子进程会执行这里
var = 100;
printf("child pid = %d, parentID=%d, var = %d\n", getpid(), getppid(), var);
}
printf("var = %d\n", var);
return 0;
}
ps aux
查看进程信息
ps ajx
可以查看进程之间的关系
kill
给进程发送一个信号,SIGKILL 9
创建多个子进程
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n = 5, i;
for (i = 0; i < n; i++) //出口1,父进程出口
if (fork() == 0)
break; //出口2,子进程出口,i不自增,子进程不能创建孙进程
if (n == i) {
sleep(n);
printf("父进程, pid = %d\n", getpid());
} else {
sleep(i);
printf("I'm %dth 子进程, pid = %d\n",
i+1, getpid());
}
return 0;
}
内容总结
以上是互联网集市为您收集整理的linux 系统编程 fork全部内容,希望文章能够帮你解决linux 系统编程 fork所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。