获取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终止状态
阅读(3550) | 评论(0) | 转发(3) |