Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1743204
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-07-20 08:48:15

原文地址:进程程序设计 作者:

获取ID:
#include
#include
pid_t getpid(void); //获取本进程ID
pid_t getppid(void) //获取父进程ID

进程创建-fork:
#include
pid_t fork(void);
[Function]:创建子进程
[Return]:/
1、在父进程中,返回子进程PID;
2、在子进程中,返回0;
3、出错,返回-1;
父子进程:共享代码段;数据空间、堆栈空间都会从父进程拷贝的,而不是共享的。

进程创建-vfork:
#include
#include
pid_t vfork(void);
[Function]:创建子进程

fork PK vfork:
[Diff]:
1、
fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段(准确来说子进程在执行exec或exit函数前在父进程空间执行)
2、
fork:父子进程的执行次序不确定
vfork:子进程先运行,父进程后运行

[CPU:特定的时间只有一个进程运行!!!]

exec函数族:
exec用[被执行的程序]替换调用它的程序。
[fork PK exec]:
fork创建一个新的进程,产生一个新的PID。
exec启动一个新程序,替换原有的进程因此进程的PID不回改变

#include
int execl(const char *path, const char *arg1,...);
[Argument]:
path:被执行程序名(含完整路径)
arg1 - argn: 被执行程序所需要的命令行参数,[含程序名]。以空指针[NULL]结束。

#include
int execlp(const char *path, const char *arg1, ...);
[Argument]:
path:被执行程序名(不含路径),从path环境变量中找改程序。

#include
int execv(const char *path, char *const arg[]);
[Argument]:
path:被执行程序名(含完整路径)
argv[]: 被执行程序所需要的命令行参数数组
[Explain]:execv启动后不退出(执行到该代码后的后面代码是不会被执行的)
#include
int system(const char *string);
[Function]:
调用fork产生子进程,由子进程来调用/bin/sh -c string 来执行参数string所代表的命令。

exec函数族[Return]: success:不返回;fail:-1

进程等待:
#include
#include
pid_t wait(int *status);
[Function]:阻塞该进程,直到其[某个]子进程退出。
[Return]:sccess: 子进程识别码(PID); fail: -1。失败原因存于errno 中。

#include
#include
pid_t waitpid(pid_t pid, int *statloc, int *status);
[Return]: success: 0; fail: -1

system函数:
#include
int system(const char *cmdstring)
[Explain]: system在其实现中调用了fork、exec、waitpid,因此有三种返回值。
[Return]: 1>、如果fork失败或者waitpid返回除EINTR之外的出错:-1;
 2>、如果exec失败(表示不能执行shell): 与exit(127);
 3>、三个函数都成功: shell终止状态


阅读(257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~