LinuxC——4.进程控制

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)
终止信号提取

猜你喜欢

转载自www.cnblogs.com/littlepage/p/12670869.html