子进程和父进程关系以及缓冲区应用
2016-02-23 18:14
561 查看
int main()
{
printf("abc\n");
pid_t r = fork();//子进程从fork()的下条语句开始运行,标准答案是从fork的后半部分开始运行
if(r==0)
{
printf("getpid = %d\n",getpid());
printf("getppid = %d\n",getppid());
}
if(r>0)
{
printf("r = %d\n",r);
printf("getpid = %d\n",getpid());
printf("getppid = %d\n",getppid());
}
if(r==-1)
{
printf("error!\n");
}
printf("123\n");
./getpid > 1.txt
1.txt:
abc
r = 2925
getpid = 2924
getppid = 2349
123
abc
getpid = 2925
getppid = 1
123
./getpid
abc
r = 2922 创建的子进程的pid
getpid = 2921 当前进程的pid
getppid = 2349当前进程父进程的pid
123
gec@ubuntu:~/shared$ getpid = 2922当前进程的pid
getppid = 1 //init进程号,父进程死了找了一个继父init,如果用else if else,结果会不一样。
123
为什么1.txt多个abc?
因为文本为全缓冲,而屏幕为行缓冲,当将执行程序的结果直接输出到屏幕时,遇到‘\n’,将结果
强制刷新,输出到屏幕,然后将内容清空,所以父进程拷贝到子进程的代码中不含有abc,
但输出到文本不一样,文本为全缓冲,系统会将代码全缓冲到一个缓冲区中,父进程执行代码printf
("abc\n")后,并不会将其清空,而是将其存放到缓冲区,并copy到子进程,然后子进程运行后就会再次输出
abc。
{
printf("abc\n");
pid_t r = fork();//子进程从fork()的下条语句开始运行,标准答案是从fork的后半部分开始运行
if(r==0)
{
printf("getpid = %d\n",getpid());
printf("getppid = %d\n",getppid());
}
if(r>0)
{
printf("r = %d\n",r);
printf("getpid = %d\n",getpid());
printf("getppid = %d\n",getppid());
}
if(r==-1)
{
printf("error!\n");
}
printf("123\n");
./getpid > 1.txt
1.txt:
abc
r = 2925
getpid = 2924
getppid = 2349
123
abc
getpid = 2925
getppid = 1
123
./getpid
abc
r = 2922 创建的子进程的pid
getpid = 2921 当前进程的pid
getppid = 2349当前进程父进程的pid
123
gec@ubuntu:~/shared$ getpid = 2922当前进程的pid
getppid = 1 //init进程号,父进程死了找了一个继父init,如果用else if else,结果会不一样。
123
为什么1.txt多个abc?
因为文本为全缓冲,而屏幕为行缓冲,当将执行程序的结果直接输出到屏幕时,遇到‘\n’,将结果
强制刷新,输出到屏幕,然后将内容清空,所以父进程拷贝到子进程的代码中不含有abc,
但输出到文本不一样,文本为全缓冲,系统会将代码全缓冲到一个缓冲区中,父进程执行代码printf
("abc\n")后,并不会将其清空,而是将其存放到缓冲区,并copy到子进程,然后子进程运行后就会再次输出
abc。
相关文章推荐
- 运行app时报java.lang.ClassNotFoundException
- respondsToSelector:的使用
- 添加依赖项目失败
- Matlab运行错误捕捉办法
- iOS小明开发笔记(二十一) (缓存机制NSUserDefaults)
- 【bzoj2039】[2009国家集训队]employ人员雇佣 最小割
- ES6新特性概览
- Category的主要知识点
- 决策树
- bootstrap模态框关闭
- 打造高效率产品测试体系--产品测试管理(深圳,2016.3.18~19)
- Android 三大图片缓存原理、特性对比
- .Net网站架构设计(二)Web服务器集群架构
- 全屏背景-Quick-cocos2dx
- 理解javascript this 值
- SQL Server 历史SQL执行记录
- iOS小明开发笔记(二十) (retain、strong、weak、assign区别)
- AsyncTask
- 面向对象之包
- ADB命令小结