深入了解进程创建与终止:fork与exit函数的探索
我们之前已经讨论过fork函数,具体内容可以参考以下文章:
Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork_linux top adbd是什么线程-CSDN博客
https://www.php.cn/link/ed3fc73e6c5e6b0723e9e7935f50947a
今天我们将进一步探讨fork函数在Linux中的应用。
在Linux操作系统中,fork函数是一个关键的函数,它用于从现有进程中创建一个新的子进程。原始进程称为父进程,而新创建的进程称为子进程。
fork函数会返回两个不同的值:在子进程中返回0,而在父进程中返回子进程的PID。
代码语言:C
#include <unistd.h> pid_t fork(void); // 返回值:在子进程中返回0,在父进程中返回子进程的PID,出错时返回-1

以下是一个使用fork函数的示例代码:
int main(void) {
pid_t pid;
printf("Before: pid is %d\n", getpid());
if ((pid = fork()) == -1) {
perror("fork()"), exit(1);
}
printf("After: pid is %d, fork return %d\n", getpid(), pid);
sleep(1);
return 0;
}运行结果:
<code>[kiana@localhost ~]$ ./a.out Before: pid is 43676 After: pid is 43676, fork return 43677 After: pid is 43677, fork return 0</code>


进程的终止可以分为正常终止和异常终止。我们之前的示例中,1和2表示正常终止,而3表示异常终止。终止进程可以通过返回某个数字或调用exit函数来实现,这个数字称为退出码。我们可以通过echo $?来查看最近一个进程的退出码。




运行结果:

我们发现,运行结果只执行到第一个printf,并没有执行第二个,因为代码在遇到exit函数时就直接终止了进程。那么,上述程序的退出码是什么呢?答案是40,因为exit函数无论在代码中的哪个位置,只要被调用就会立即终止调用它的进程。


_exit函数
#include <unistd.h> void _exit(int status); // 参数:status定义了进程的终止状态,父进程可以通过wait函数获取该值
虽然status是int类型,但父进程只能使用其低8位。因此,_exit(-1)时,终端执行$?会返回255。
// _exit
int main() {
printf("hello");
_exit(0);
}运行结果:
[root@localhost linux]# ./a.out [root@localhost linux]#
exit函数
#include <unistd.h> void exit(int status);
exit函数最终也会调用_exit,但在调用_exit之前会执行以下操作:
// exit
int main() {
printf("hello");
exit(0);
}运行结果:
[root@localhost linux]# ./a.out hello [root@localhost linux]#
未完待续~
以上就是Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号