======================================================================
创建一个新的进程:
头文件: #include <unistd.h>
函数原型:
pid_t fork(void);函数说明:
该函数执行成功之后,将会产生一个新的子进程,在新的子进程中其返 回值为 0,在原来的父进程中其返回值为大于 0 的正整数,该正整数就 是子进程的 PID返回值:
成功 0 或者大于 0 的正整数 失败 -1==================================================================
execl ( 执行文件 )
头文件: #include <unistd.h>
定义函数:
int execl(const char * path, const char * arg, ...);函数说明:
execl()用来执行参数 path 字符串所代表的文件路径, 接下来的参数代表执行该文件时传递过去的 argv(0), argv[1], …, 最后一个参数必须用空指针(NULL)作结束.返回值:
如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于 errno 中.==================================================================
getpid ( 取得进程识别码 )
头文件: #include <unistd.h>
定义函数:
pid_t getpid(void);函数说明:
getpid ()用来取得目前进程的进程识别码, 许多程序利用取到的此值来建立临时文件, 以避免临时文件相同带来的问题.返回值:
目前进程的进程识别码==================================================================
exit ( 正常结束进程 )
头文件 : #include <stdlib.h>
定义函数:
void exit(int status);函数说明 :
exit()用来正常终结目前进程的执行, 并把参数 status 返回给父进程, 而进程所有的缓冲区数据会自 动写回并关闭未关闭的文件.==================================================================
_exit ( 结束进程执行 )
头文件 : #include <unistd.h>
定义函数:
void _exit(int status);函数说明:
_exit()用来立刻结束目前进程的执行, 并把参数 status 返回给父进程, 并关闭未关闭的文件. 此函 数调用后不会返回, 并且会传递 SIGCHLD 信号给父进程, 父进程可以由 wait 函数取得子进程结束状态. 附加说明 _exit ()不会处理标准 I/O 缓冲区, 如要更新缓冲区请使用 exit ().==================================================================
atexit ( 设置程序正常结束前调用的函数 )
头文件: #include <stdlib.h>
定义函数:
int atexit (void (*function) (void));函数说明:
atexit()用来设置一个程序正常结束前调用的函数. 当程序通过调用 exit()或从 main 中返回时, 参 数 function 所指定的函数会先被调用, 然后才真正由 exit()结束程序.返回值:
如果执行成功则返回 0, 否则返回-1, 失败原因存于 errno 中.==================================================================
fprintf ( 格式化输出数据至文件 )
头文件: #include <stdio.h>
定义函数:
int fprintf(FILE * stream, const char * format, ...);函数说明:
fprintf()会根据参数 format 字符串来转换并格式化数据, 然后将结果输出到参数 stream 指定的文 件中, 直到出现字符串结束(’\0’)为止.返回值:
关于参数 format 字符串的格式请参考 printf(). 成功则返回实际输出的字符数, 失败则返回-1, 错 误原因存于 errno 中.==================================================================
wait ( 等待子进程中断或结束 )
头文件: #include <sys/types.h> #include <sys/wait.h>
定义函数:
pid_t wait (int * status);函数说明:
wait()会暂时停止目前进程的执行, 直到有信号来到或子进程结束. 如果在调用 wait()时子进程已经 结束, 则 wait()会立即返回子进程结束状态值. 子进程的结束状态值会由参数 status 返回, 而子进程的进程识别码也会一快返回. 如果不在意结束状态值, 则 参数 status 可以设成 NULL. 子进程的结束状态值请参考waitpid().返回值:
如果执行成功则返回子进程识别码(PID), 如果有错误发生则返回-1. 失败原因存于 errno 中.==================================================================
waitpid ( 等待子进程中断或结束 )
头文件: #include <sys/types.h> #include <sys/wait.h>
定义函数:
pid_t waitpid(pid_t pid, int * status, int options);函数说明:
waitpid()会暂时停止目前进程的执行, 直到有信号来到或子进程结束. 如果在调用 wait()时子进程 已经结束, 则 wait()会立即返回子进程结束状态值. 子进程的结束状态值会由参数 status 返回, 而子进程的进程识别码也会一快返回. 如果不在意结束状态值, 则参数 status 可以设成 NULL. 参数 pid 为欲等待的子进程识别码, 其他数值意义如下: pid<-1 等待进程组识别码为 pid 绝对值的任何子进程. pid=-1 等待任何子进程, 相当于 wait(). pid=0 等待进程组识别码与目前进程相同的任何子进程. pid>0 等待任何子进程识别码为 pid 的子进程.参数 option 可以为 0 或下面的 OR 组合 WNOHANG 如果没有任何已经结束的子进程则马上返回, 不予以等待. WUNTRACED 如果子进程进入暂停执行情况则马上返回, 但结束状态不予以理会.子进程的结束状态返回后存于 status, 底下有几个宏可判别结束情况: WIFEXITED(status) 如果子进程正常结束则为非 0 值. WEXITSTATUS(status) 取得子进程 exit()返回的结束代码, 一般会先用 WIFEXITED 来判断是 否正常结束才能使用此宏. WIFSIGNALED(status) 如果子进程是因为信号而结束则此宏值为真 WTERMSIG(status) 取得子进程因信号而中止的信号代码, 一般会先用 WIFSIGNALED 来判断 后才使用此宏. WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为真. 一般只有使用 WUNTRACED 时才会有此情况. WSTOPSIG(status) 取得引发子进程暂停的信号代码, 一般会先用 WIFSTOPPED 来判断后才 使用此宏.返回值
如果执行成功则返回子进程识别码(PID), 如果有错误发生则返回-1. 失败原因存于 errno 中.==================================================================
child_elf.c
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char const *argv[]) { printf("[%d]it is running child_elf\n", (int)getpid()); #ifdef _ABORT abort(); //发送自杀信号 #else exit(8); #endif }