-
进程创建
获取进程
getpid获得进程识别码
表头文件:
#include<unistd.h>
函数原型:
pid_t getpid(void);
返回值:
目前进程的进程识别码
getppid获得父进程的进程识别码
表头文件:
include<unistd.h>
函数原型:
pid_t getppid(void);
返回值:
目前进程的父进程识别码
启动进程
fork创建子进程
表头文件:
#include<std/types.h>
#include<unistd.h>
函数原型:
pid_t fork(void);
函数说明:
子进程获得父进程的数据空间、堆和栈的副本,父进程并不共享这部分内存,
也就是说子进程对父进程的同名变量进行修改并不会影响其在父进程的值
返回值:
一次返回两个值:
在父进程返回子进程的进程号;
在子进程中返回0,错误返回-1;
vfork创建子进程
表头文件:
#include<unitid.h>
函数原型:
pid_t vfork(void);
函数说明:
子进程和父进程共享地址空间,如果子进程修改了某变量将影响到父进程
必须调用exit()来结束,否则子进程将不能结束
返回值:
若成功:在父进程返回新建立的子进程的PID,
在子进程中返回0;
若失败:返回-1,失败原因存在errno中
exec族
exec函数族中,一般是由fork创建子进程后,在子进程中执行,也就是替换子进程中的东西,进程中的空间代码完全被新程序代替,但是调用exec程序不会创建新进程,进程ID也没有发生变化
PATH环境变量:包含了一张目录表,系统通过PATH环境变量定义的路径搜索执行码,PATH环境变量定义时目录之间需用用“:”分隔,以“.”号表示结束。PATH环境变量定义在用户的.profile或.bash_profile中,下面是PATH环境变量定义的样例,此PATH变量指定在“/bin”、“/usr/bin”和当前目录三个目录进行搜索执行码。
PATH=/bin:/usr/bin:.
表头文件:
#include<unistd.h>
函数原型:
int execl(const char *path, const char *arg1, ...);
函数参数:
path:被执行程序名,含完整路径;
arg1 - arg n:被执行程序所需的命令行参数,含程序名。以NULL( 或(char*)0 )结束
返回值:
如果执行成功不返回;
失败返回-1, 失败原因存在errno.
表头文件:
#include<unistd.h>
函数原型:
int execv(const char *path, char *const argv[], ...);
函数参数:
path:被执行程序名,含完整路径;
argv[]:被执行程序所需的命令行参数组
返回值:
如果执行成功不返回;
失败返回-1, 失败原因存在errno.
system启动进程
表头文件:
#include<stdlib.h>
函数原型:
int system(const char* string);
-
进程等待
wait
表头文件:
#include<sys/types.h>
#include<sys/wait.h>
函数原型:
pid_t wait(int *status);
函数说明:
在他目前进程的执行直到有信号来到或者子进程结束;
如果调用wait子进程已结束,wait会立即返回子进程结束状态值;
结束状态值由status返回,子进程PID也会一块返回;
如果不在意结束状态值,status可设NULL;
返回值:
成功:返回子进程PID;
失败:返回-1, 失败原因存于errno;
waitpid
表头文件:
#include<sys/types.h>
#include<sys/wait.h>
函数原型:
pid_t waitpid(pid_t pid, int *status, int options);
函数说明:
其他参见wait();
pid <-1 =-1 =0 >0;
options:
0或下面的OR组合:
WNOHANG:如果没有任何已结束的子进程则马上返回,不予等待;
WUBTRACED:如果子进程进入暂停执行则马上返回,但结束状态不予理会;
返回值:
成功:返回PID;
失败:返回-1,失败原因存于errno
-
进程退出
exit
表头文件:
#include<stdlib.h>
函数原型:
void exit(int status);
函数说明:
exit(0) 表示程序正常退出,
exit⑴/exit(-1)表示程序异常退出。
_exit
表头文件:
#include<unistd.h>
函数原型:
void _exit(int status);
exit 和 _exit比较
/*会打印hello world...*/
#include<stdlib.h>
#include<stdio.h>
int main()
{
printf("hello world...");
exit(0);
return 0;
}
/*不会打印hello world...*/
#include<unistd.h>
#include<stdio.h>
int main()
{
printf("hello world...");
_exit(0);
return 0;
}
/*会打印hello world...*/
#include<unistd.h>
#include<stdio.h>
int main()
{
printf("hello world...\n");
_exit(0);
return 0;
}