464 字
2 分钟
Loading
插叙:进程api

关键问题:如何创建并控制进程?

Fork(); 系统调用

系统调用fork用于创建新的进程,新创建的进程几乎和原有进程一样,但不再执行前面的语句块,而是执行fork之后的语句块,用代码表示如下:

1 #include <stdio.h>

2 #include <stdlib.h>

3 #include <unistd.h>

4

5 int

6 main(int argc, char *argv[])

7 {

8 printf(“hello world (pid:%d)\n”, (int) getpid());

9 int rc = fork();

10 if (rc < 0) { // fork failed; exit

11 fprintf(stderr, “fork failed\n”);

12 exit(1);

13 } else if (rc == 0) { // child (new process)

14 printf(“hello, I am child (pid:%d)\n”, (int) getpid());

15 } else { // parent goes down this path (main)

16 printf(“hello, I am parent of %d (pid:%d)\n”,

17 rc, (int) getpid());

18 }

19 return 0;

20 }

运行结果只有一个hello输出

子进程不是完全拷贝了父进程,它也拥有自己的私有内存,寄存器和程序计数器,但fork返回的值是不同的(是的,fork需要返回一个int类型的参数,所以你需要用一个变量来储存它!),父进程返回的值是创建子进程的pid,而子进程获得的返回值是0。

Wait()系统调用

有些时候,我们需要从父进程里创建一个子进程,并且在子进程执行完毕后才会继续执行父进程并退出,这很重要,因此我们使用wait系统调用。

Exec进程:

这个系统调用可以让子进程执行与父进程同的程序。例如,在p2.c 中调用 fork(),这只是在你想运行相同程序拷贝谁有用。但是我们常常想运行我同的程序,exec()正好做这样的事

多读man手册,这是成为一个程序员的必经之路。

其他api:

除了fork exec wait之外,unix还提供了许多同其他交互的进程方式,例如kill系统调用向进程发送信号要求睡眠或终止…

插叙:进程api
https://vilstia.pages.dev/posts/学习笔记/操作系统/插叙进程api/
作者
琴泠
发布于
2024-10-09
许可协议
CC BY-NC-SA 4.0