1. 请教fork运行机制-UNIX环境编程学习
2011-02-20 21:39
246 查看
先看代码:
书中分析:
• 调用f o r k创建一个新进程。新进程是调用进程的复制品,故称调用进程为父进程,新创
建的进程为子进程。f o r k对父进程返回新子进程的非负进程I D,对子进程则返回0。因为f o r k创
建一新进程,所以说它被调用一次(由父进程),但返回两次(在父进程中和在子进程中)。
但是测试时通过子进程中execlp(buf, buf, (char *)0)运行某程序后会阻塞?因为如果正常执行的话,总是要调用execlp后面的printf输出吧。
父程序阻塞应该发生在waitpid时,想知道父程序/子进程/waitpid之间怎么运转的
#include <sys/types.h> #include <sys/wait.h> #include "../ourhdr.h" int main(int argc, char* argv[]) { char buf[MAXLINE] = ""; pid_t pid = 0; int status = 0; printf("%% "); while(fgets(buf, MAXLINE, stdin) != NULL) { buf[strlen(buf) - 1] = 0; if((pid = fork()) < 0) printf("fork error"); else if(pid == 0) { execlp(buf, buf, (char *)0); printf("couldn't execute: %s", buf); exit(127); } if((pid = waitpid(pid, &status, 0)) < 0) printf("waitpid error"); printf("%% "); } exit(0); }
书中分析:
• 调用f o r k创建一个新进程。新进程是调用进程的复制品,故称调用进程为父进程,新创
建的进程为子进程。f o r k对父进程返回新子进程的非负进程I D,对子进程则返回0。因为f o r k创
建一新进程,所以说它被调用一次(由父进程),但返回两次(在父进程中和在子进程中)。
但是测试时通过子进程中execlp(buf, buf, (char *)0)运行某程序后会阻塞?因为如果正常执行的话,总是要调用execlp后面的printf输出吧。
父程序阻塞应该发生在waitpid时,想知道父程序/子进程/waitpid之间怎么运转的
相关文章推荐
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- Unix环境高级编程学习chapter1-Unix环境高级编程运行 第三版 环境搭建
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- unix环境编程学习笔记------套接字缓冲区的原理
- UNIX环境编程学习笔记----unix编程实例----signal使用实例
- UNIX环境编程学习笔记(6)——文件I/O之判断文件类型
- UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲
- Unix环境高级编程学习笔记整理
- UNIX环境编程学习笔记(13)——文件I/O之标准I/O流
- UNIX环境高级编程_学习笔记(一)
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- UNIX网络编程和UNIX环境高级编程的环境搭建和运行实例
- 为学习APUE(Unix环境高级编程)偷懒,而写的脚本,基本上相当于一个简单的工程创建脚本了
- Unix环境编程学习笔记-----编程实例---- the normal exit1
- UNIX环境编程---------原始套接字学习笔记-----原始套接字的bind操作
- UNIX环境编程学习笔记(27)——多线程编程(二):控制线程属性
- unix环境高级编程学习1-unix文件和目录
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有用户名和UID, GID
- UNIX环境编程学习笔记(3)——文件I/O之内核 I/O 数据结构