LinuxC——4.进程控制
1.PID
pid是进程id,id为0是系统调度进程,id为1是初始化进程
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void); // 进程id
ppid_t getppid(void); // 父进程id
uid_t getuid(void); // 用户id
gid_t getgid(void); // 用户组id
2.fork
fork函数是父亲进程进行拷贝父进程内存空间。
父进程返回子进程pid
子进程成功返回0,失败返回-1
#include <unistd.h>
pid_t fork(void)
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
pid_t ret = 0;
ret = fork();
if(ret > 0) {
int fd = 0;
fd = open("./a.txt", O_RDWR|O_CREAT, 0664);
write(fd, "hello\n", 6);
} else if(ret == 0) {
int fd = 0;
fd = open("./a.txt", O_RDWR|O_CREAT, 0664);
write(fd, "hello\n", 6);
}
return 0;
}
// 对同一个文件操作,会覆盖
3.exec加载器
我们如果一直在if和else if中控制进程,那么会臃肿,我们使用exec加载器进行解决这个问题。
int execve(const char *filename, char **const argv, char **const envp)
filename 可执行文件名
argv 参数
envp 环境变量表
extern char **environ; // 进程环境变量表
4.system函数
进行操作系统函数
int system(const char* command)
5.回收进程资源
进程结束,程序的资源被释放。父进程会进行释放子进程资源
- 僵尸进程:子进程终止,父进程还活着,没有释放子进程资源,所以子进程成了僵尸进程
- 孤儿进程:父亲死了,子进程成了孤儿进程
6.wait函数
pid_t wait(int *status);
获取子进程的终止状态
WIFEXITED(status);
查看终止原因
WIFSIGNALED(status)
终止信号提取