通过阅读标准,我了解到:
- 信号处理是一个进程的所有线程共享的属性;
- 信号掩码是每个线程的属性。
但是,标准将以下内容(在 2018 版 Base 卷中,第 3.210 节 Live Process)列为“在进程内的所有线程之间共享的系统资源”:
- 进程 ID、父进程 ID、进程组 ID、会话成员资格、
- 真实、有效和保存的用户和组 ID 以及补充组 ID,
- 当前工作目录,根目录,
- 掩码,
- 文件描述符。
列表中缺少信号处理。
是否正确地说:信号处理是与过程相关的属性?或者是否有原因将其排除在上述列表之外?
答案是肯定的:信号处理在进程中的所有线程之间共享。
它从列表中“被排除在外”的原因是信号处理程序实际上并不是进程的“属性”或“资源”。你在任何地方都看不到它
/proc<pid>/
。这就像说函数、全局变量或一般内存是进程的“共享属性”——它只是“进程”定义的一部分。