进程的创建、回收、结束

文摘   2024-08-23 07:30   内蒙古  

进程创建:

在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秒然后结束。父进程会等待子进程结束后再结束。通过这个程序,您可以体验到进程的创建、回收和结束过程。


兄弟嵌入式
从入门到精通,学习并分享嵌入式软、硬件的知识。
 最新文章