关键词:Linux进程控制、进程创建fork、进程终止、进程等待。本文将围绕这四个核心概念展开,带你掌握进程管理的精髓。
在Linux中,fork()是创建新进程的唯一方式(除特殊情况)。它通过复制调用进程来创建一个新的子进程。fork函数一次调用两次返回,在父进程中返回子进程的PID,在子进程中返回0。这种机制得益于写时拷贝技术,提高效率。
#include #include int main() { pid_t pid = fork(); if (pid == 0) { printf("子进程运行,PID:%d", getpid()); } else if (pid > 0) { printf("父进程运行,子进程PID:%d", pid); } else { perror("fork失败"); } return 0;} 执行后,你会看到两条输出,说明父子进程并发执行。这是进程创建fork的基本用法。
进程终止可以通过exit()、_exit()或从main返回。区别在于exit()会刷新缓冲区并调用终止处理程序,而_exit()直接进入内核。下面的示例展示了退出码的传递。
#include #include #include int main() { printf("即将退出..."); // exit(0); // 会刷新缓冲区,输出显示 _exit(0); // 直接退出,可能不刷新缓冲区} 在实际编程中,常用exit(0)表示成功,非零表示错误。这是进程终止的常见实践。
如果父进程不等待子进程,子进程终止后会变成僵尸进程,占用内核资源。使用wait()或waitpid()可以避免这种情况。wait会阻塞直到任一子进程结束,并返回子进程PID和状态。
#include #include #include int main() { pid_t pid = fork(); if (pid == 0) { sleep(2); return 42; // 子进程退出码 } else { int status; wait(&status); if (WIFEXITED(status)) { printf("子进程退出码:%d", WEXITSTATUS(status)); } } return 0;} waitpid提供了更多选项,如WNOHANG实现非阻塞等待。掌握进程等待是编写稳定程序的关键。
下面程序创建两个子进程,分别执行不同任务,父进程等待它们结束并打印退出码。
#include #include #include int main() { pid_t pid1, pid2; pid1 = fork(); if (pid1 == 0) { puts("子进程1运行"); return 1; } pid2 = fork(); if (pid2 == 0) { puts("子进程2运行"); return 2; } int status; waitpid(pid1, &status, 0); printf("子进程1退出码:%d", WEXITSTATUS(status)); waitpid(pid2, &status, 0); printf("子进程2退出码:%d", WEXITSTATUS(status)); return 0;} 通过这个例子,你将更深入理解Linux进程控制的全过程。
总结:本文详细讲解了进程创建、终止与等待的概念,并附有代码实战。掌握这些基础,你就能更好地控制进程生命周期。
本文由主机测评网于2026-02-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260226930.html