Linux 进程操作

Linux 进程操作

1. fork() 函数

  • 作用:创建一个新的进程,称为子进程。子进程是调用进程(父进程)的副本。
  • 参数
    • 无参数。
  • 返回值
    • 在父进程中返回子进程的 PID。
    • 在子进程中返回 0。
    • 若出错,返回 -1。
  • 示例
    pid_t pid = fork();
    if (pid < 0) {
        // 错误处理
    } else if (pid == 0) {
        // 子进程代码
    } else {
        // 父进程代码
    }
    

2. execve() 函数

  • 作用:执行一个新程序,替换当前进程的地址空间。
  • 参数
    • const char *path:要执行的程序路径。
    • char *const argv[]:参数列表,以 NULL 结尾。
    • char *const envp[]:环境变量列表,以 NULL 结尾。
  • 返回值
    • 成功时不会返回。
    • 失败时返回 -1,并设置 errno
  • 示例
    char *argv[] = {"/bin/ls", "-l", NULL};
    char *envp[] = {NULL};
    execve("/bin/ls", argv, envp);
    

3. waitpid() 函数

  • 作用:等待指定的子进程终止,并获取其状态。
  • 参数
    • pid_t pid:要等待的子进程 PID。
    • int *status:用于存储子进程状态的指针。
    • int options:选项标志,如 WNOHANG
  • 返回值
    • 成功时返回子进程的 PID。
    • 若没有子进程退出且 WNOHANG 被设置,返回 0。
    • 失败时返回 -1。
  • 示例
    waitpid(pid, &status, 0);
    

4. getpid() 函数

  • 作用:获取当前进程的 PID。
  • 参数:无。
  • 返回值:当前进程的 PID。
  • 示例
    printf("Current PID: %d\n", getpid());
    

5. getppid() 函数

  • 作用:获取当前进程的父进程 PID。
  • 参数:无。
  • 返回值:当前进程的父进程 PID。
  • 示例
    printf("Parent PID: %d\n", getppid());
    

6. exit() 函数

  • 作用:终止当前进程,并返回一个状态码。
  • 参数
    • int status:进程退出状态码。
  • 示例
    exit(EXIT_SUCCESS);
    

7. sleep() 函数

  • 作用:使当前进程休眠指定的秒数。
  • 参数
    • unsigned int seconds:休眠的秒数。
  • 返回值:实际休眠的秒数。
  • 示例
    sleep(2); // 休眠 2 秒
    

8. pause() 函数

  • 作用:使当前进程暂停,直到收到信号。
  • 参数:无。
  • 返回值:总是返回 -1,并设置 errno 为 EINTR。
  • 示例
    pause(); // 等待信号
    

9. system() 函数

  • 作用:执行一个 shell 命令。
  • 参数
    • const char *command:要执行的命令。
  • 返回值
    • 成功时返回命令的退出状态。
    • 失败时返回 -1。
  • 示例
    system("ls -l"); // 执行 ls -l 命令
    

10. pipe() 函数

  • 作用:创建一个管道,用于进程间通信。
  • 参数
    • int pipefd[2]:用于存储管道读写文件描述符的数组。
  • 返回值
    • 成功时返回 0。
    • 失败时返回 -1。
  • 示例
    int pipefd[2];
    pipe(pipefd);
    

11. read()write() 函数

  • 作用:分别用于从文件描述符读取数据和向文件描述符写入数据。
  • 参数
    • int fd:文件描述符。
    • void *buf:缓冲区。
    • size_t count:要读取或写入的字节数。
  • 返回值
    • 成功时返回实际读取或写入的字节数。
    • 失败时返回 -1。
  • 示例
    char buffer[100];
    read(fd, buffer, sizeof(buffer));
    write(fd, "Hello, World!", strlen("Hello, World!"));
    

12. close() 函数

  • 作用:关闭一个文件描述符。
  • 参数
    • int fd:要关闭的文件描述符。
  • 返回值
    • 成功时返回 0。
    • 失败时返回 -1。
  • 示例
    close(fd);
    

13. dup()dup2() 函数

  • 作用:复制文件描述符。
  • 参数
    • int oldfd:要复制的文件描述符。
    • int newfd:新文件描述符(dup2 特有)。
  • 返回值
    • 成功时返回新文件描述符。
    • 失败时返回 -1。
  • 示例
    dup(oldfd);
    dup2(oldfd, newfd);
    

14. execl(), execlp(), execv(), execvp() 函数

  • 作用:执行一个新程序,与 execve() 类似,但参数传递方式不同。
  • 参数
    • const char *path:要执行的程序路径。
    • char *const argv[]:参数列表,以 NULL 结尾。
    • char *const envp[]:环境变量列表,以 NULL 结尾(execve 特有)。
  • 返回值
    • 成功时不会返回。
    • 失败时返回 -1。
  • 示例
    execl("/bin/ls", "ls", "-l", NULL);
    execvp("ls", argv);
    

15. getuid()geteuid() 函数

  • 作用:获取当前进程的真实用户 ID 和有效用户 ID。
  • 参数:无。
  • 返回值:用户 ID。
  • 示例
    printf("Real UID: %d\n", getuid());
    printf("Effective UID: %d\n", geteuid());
    

16. getgid()getegid() 函数

  • 作用:获取当前进程的真实组 ID 和有效组 ID。
  • 参数:无。
  • 返回值:组 ID。
  • 示例
    printf("Real GID: %d\n", getgid());
    printf("Effective GID: %d\n", getegid());
    

17. setuid()setgid() 函数

  • 作用:设置当前进程的有效用户 ID 和组 ID。
  • 参数
    • __uid_t uid:要设置的用户 ID。
    • __gid_t gid:要设置的组 ID。
  • 返回值
    • 成功时返回 0。
    • 失败时返回 -1。
  • 示例:
    setuid(1000);
    setgid(1000);
    

18. nice() 函数

  • 作用:调整当前进程的优先级。
  • 参数
    • int inc:优先级调整值。
  • 返回值
    • 成功时返回新的优先级。
    • 失败时返回 -1。
  • 示例:
    nice(10); // 调整优先级
    

19. alarm() 函数

  • 作用:设置一个定时器,在指定秒数后发送 SIGALRM 信号。
  • 参数
    • unsigned int seconds:定时器时间(秒)。
  • 返回值
    • 成功时返回剩余时间。
    • 失败时返回 0。
  • 示例:
    alarm(5); // 5 秒后发送 SIGALRM 信号
    

20. signal() 函数

  • 作用:设置信号处理函数。
  • 参数
    • int signum:信号编号。
    • void (*handler)(int):处理函数。
  • 返回值
    • 成功时返回之前的处理函数。
    • 失败时返回 SIG_ERR。
  • 示例:
    signal(SIGINT, handler); // 设置 SIGINT 信号处理函数
    

这些函数是 Linux 进程操作的基础,理解它们的作用、参数和使用方法对于开发和调试多进程应用程序至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值