手册页wait(2)指出,如果指定进程不是调用进程的子进程,waitpid系统调用将返回ECHILD错误。为什么是这样?等待非子进程会产生某种安全问题吗?为什么在非子进程上实现等待是困难或不可能的,是否存在技术原因?
假设我是用户 ID 1000。我在 UID 命名空间内运行一个程序,将命名空间内的 UID 0 映射到命名空间外的 UID 1000。然后程序尝试将其自己的 UID 更改为 50,这在命名空间之外没有对应的 UID。
程序是否成功更改了自己的(内核)UID?如果是这样,它的 UID 从命名空间之外看起来是什么?它仍然是1000,还是别的什么?