//=== Linux 进程管理相关函数 =============================================
#include
pid_t getpid(void);// 获取当前进程的ID。
pid_t getppid(void);// 获取父进程的ID。
uid_t getuid(void);// 获取实际用户ID。
uid_t geteuid(void);// 获取有效用户ID。
gid_t getgid(void);// 获取实际组ID。
gid_t getegid(void);// 获取有效组ID。
pid_t fork(void);// 创建一个新进程。对父进程返回新创子进程ID;对子进程返回0;失败返回-1。// 子进程复制父进程的堆栈段和数据段的内容,但共享代码段。// 主要区别:// 1. 子进程有独立的进程ID和父进程ID。// 2. 子进程的时间计数器被重置。// 3. fork函数返回值不同。// 4. 文件锁不被继承。// 5. 子进程清理未处理的闹钟信号和未决信号。// 可能导致fork失败的原因包括系统资源不足或用户进程过多。
pid_t vfork(void);// 创建一个与父进程共享地址空间的子进程。// vfork产生的子进程先运行,父进程等待子进程完成后再继续。// 注意:不要在任何函数中调用vfork。
int setuid(uid_t uid);// 改变进程的实际用户ID和有效用户ID。成功返回0,失败返回-1。
#include
void exit(int status);// 退出当前进程,并设置退出状态。可使用'echo $?'查看程序退出值。
#include
pid_t wait(int *status);// 等待任意子进程结束,并获取其终止状态。// 返回已终止子进程的ID,并将状态信息保存到status指向的内存区域。// 使用宏如WIFEXITED、WIFSIGNALED、WIFSTOPPED判断子进程的状态。
pid_t waitpid(pid_t pid, int *status, int options);// 等待指定的子进程结束。// 参数options包括WNOHANG(非阻塞)、WUNTRACED(捕获暂停状态)等。
#include
void (*signal(int signo, void (*handler)(int)))(int);// 设置或获取信号处理函数。// 参数signo为信号编号,handler为信号处理函数指针。// SIG_IGN忽略信号,SIG_DFL恢复默认处理方式。// 函数返回上一次设置的信号处理函数。
int kill(pid_t pid, int sig);// 向指定进程发送信号。// 参数pid表示目标进程ID,sig为信号编号。// 特殊值如-1表示向所有进程发送信号。