打印
[技术问答]

进程的创建、回收、结束

[复制链接]
20|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycamelaaa|  楼主 | 2024-11-15 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
进程创建:在Linux中,进程的创建通常通过fork()函数来实现。fork()函数会创建一个新的进程,新进程是调用进程的副本,但具有不同的PID。函数定义:#include <unistd.h>

pid_t fork(void);
函数原型:fork()函数会返回两次,一次在父进程中返回新创建子进程的PID,一次在子进程中返回0。如果出现错误,fork()会返回-1。进程回收:进程的回收通常通过wait()或waitpid()函数来实现。这些函数用于父进程等待子进程结束,并回收子进程的资源。函数定义:#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
函数原型:wait()函数会阻塞父进程,直到任何一个子进程结束。waitpid()函数允许父进程指定等待的子进程PID,以及一些其他选项。进程结束:进程可以通过exit()函数来正常结束,也可以通过kill()函数发送信号来终止进程。函数定义:#include <stdlib.h>
#include <signal.h>

void exit(int status);
int kill(pid_t pid, int sig);
函数原型:exit()函数会终止当前进程,并返回一个状态码。kill()函数用于向指定进程发送信号。其他进程相关函数:除了上述函数外,还有一些其他与进程相关的函数:getpid():获取当前进程的PID。getppid():获取当前进程的父进程的PID。exec()系列函数:用于在当前进程中执行新的程序。signal():用于设置信号处理函数。sleep():使当前进程进入睡眠状态。使用C语言代码举例:#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
    pid_t pid;

    pid = fork();

    if (pid < 0) {
        fprintf(stderr, "Fork failed\n");
        return 1;
    } else if (pid == 0) {
        // 子进程
        printf("Child process created with PID: %d\n", getpid());
        sleep(3);
        printf("Child process finished\n");
        exit(0);
    } else {
        // 父进程
        printf("Parent process with PID: %d\n", getpid());
        wait(NULL);
        printf("Parent process finished\n");
    }

    return 0;
}
在这个例子中,父进程创建了一个子进程,子进程会睡眠3秒然后结束。父进程会等待子进程结束后再结束。通过这个程序,您可以体验到进程的创建、回收和结束过程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

653

主题

2697

帖子

0

粉丝