下面是使用fork()函数创建进程的程序编码:

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid;

    pid = fork();

    if (pid < 0) {
        fprintf(stderr, "Fork failed\n");
        return 1;
    } else if (pid == 0) {
        for (int i = 0; i < 5; i++) {
            printf('I am child, pid=%d\n', getpid());
            sleep(1);
        }
    } else {
        for (int i = 0; i < 5; i++) {
            printf('I am parent, pid=%d\n', getpid());
            sleep(1);
        }
    }

    return 0;
}

编译运行该程序,可以得到以下输出结果:

I am parent, pid=1234
I am child, pid=1235
I am parent, pid=1234
I am child, pid=1235
I am parent, pid=1234
I am child, pid=1235
I am parent, pid=1234
I am child, pid=1235
I am parent, pid=1234

结果分析:

  • 程序中的fork()函数会在调用处将进程分成两个部分,一个是父进程,一个是子进程。
  • 父进程中的fork()函数返回子进程的PID,子进程中的fork()函数返回0。
  • 父进程中的if语句块会执行父进程的输出,子进程中的if语句块会执行子进程的输出。
  • 父进程和子进程中的循环分别执行5次,每次循环间隔1秒。
  • 父进程和子进程的输出结果交替出现,因为它们是并发执行的。
  • 父进程的PID是固定的,而子进程的PID是由操作系统分配的。

因此,程序中父子进程交替输出的原因是它们是并发执行的,而每个进程输出的间隔是1秒。


原文地址: https://www.cveoy.top/t/topic/pk2s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录