# 进程复习题

> 原文：<https://github.com/angrave/SystemProgramming/wiki/Processes-Review-Questions>

## 话题

*   正确使用 fork，exec 和 waitpid
*   使用 exec 与路径
*   了解 fork 和 exec 以及 waitpid 的作用。例如。如何使用他们的返回值。
*   SIGKILL vs SIGSTOP vs SIGINT。
*   按 CTRL-C 时发送的信号
*   使用 shell 中的 kill 或 kill POSIX 调用。
*   进程内存隔离。
*   进程内存布局（堆，栈等;无效的内存地址）。
*   什么是叉炸弹，僵尸和孤儿？如何创建/删除它们。
*   getpid 和 getppid
*   如何使用 WAIT 退出状态宏 WIFEXITED 等

## 问题/练习

*   有没有 p 和没有 p 的高管有什么区别？什么是操作系统
*   如何将命令行参数传递给`execl*`？ `execv*`怎么样？按惯例，第一个命令行参数应该是什么？
*   你怎么知道`exec`或`fork`是否失败了？
*   什么是`int *status`指针进入等待状态？什么时候等待失败？
*   `SIGKILL`，`SIGSTOP`，`SIGCONT`，`SIGINT`之间有什么区别？什么是默认行为？您可以为哪些设置信号处理程序？
*   按`CTRL-C`时发送了什么信号？
*   我的终端锚定到 PID = 1337 并且刚刚变得没有响应。写下终端命令和 C 代码，将`SIGQUIT`发送给它。
*   一个进程可以通过正常方式改变另一个进程内存吗为什么？
*   堆，栈，数据和文本段在哪里？你能写些哪些细分？什么是无效的内存地址？
*   用 C 编码叉炸弹（请不要运行它）。
*   什么是孤儿？它是如何变成僵尸的？我如何成为一个好父母？
*   当你父母告诉你不能做某事时，你不讨厌它吗？给我写一个程序，将`SIGSTOP`发送给你的父母。
*   编写 fork exec 等待可执行文件的函数，并使用等待宏告诉我进程是否正常退出或是否已发出信号。如果进程正常退出，则使用返回值打印该进程。如果没有，则打印导致进程终止的信号编号。