gpt4 book ai didi

linux - 为什么/bin/login 在最近的 Linux 上 fork

转载 作者:太空狗 更新时间:2023-10-29 12:27:05 24 4
gpt4 key购买 nike

回到过去美好的 Unix 时代(详见史蒂文斯的 Unix 网络编程,第 63 页,1990 年),init fork , child 运行 getty。然后 getty 获取用户名并执行/bin/login,将用户名传递给它。然后登录要求输入密码,检查凭据,然后执行/etc/passwd 中的任何内容,通常是一个 shell,例如/bin/bash.

getty、login 和 shell 都具有相同的 PID,这是由于 exec 性质和缺乏 fork。

现在我看到/bin/login fork 并在子进程中运行 shell,而父进程只是在等待子进程。至少这是 Linux 上的逻辑。为什么是这样?它有什么作用?这个决定是谁做的??我可以生成登录名而不使用 fork 吗??

这很痛苦,至少对我来说是这样。我正在使用 forkpty 构建一个伪终端并在从属端运行登录。我将 forkpty 的 pid 结果用于例如向 child 发出信号。当然,我想要的是 bash 的 pid,而不是登录的 pid。现在那些 pid 不同了,我必须通过 popen 运行一个令人讨厌的“ps -o pid= --ppid LOGINPID”来追查 bash 的 pid。

斯图尔特

最佳答案

根据 https://github.com/shadow-maint/shadow/blob/master/src/login.c#L1186 :“我们必须在 setuid() 之前进行 fork,因为我们需要以 root 身份调用 pam_close_session()。”所以这是由于 PAM .该代码以 USE_PAM 为条件,因此我猜您可以在配置时禁用 PAM 的情况下重新编译影子。

关于linux - 为什么/bin/login 在最近的 Linux 上 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330602/

24 4 0
文章推荐: html - 有必要显示一个空的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com