Macos 在根进程运行时,如何使用C++;?Linux/Mac
我有一个程序以root用户身份运行,并调用另一个程序来运行(a) 我想要以用户登录的身份运行。我使用了命令:Macos 在根进程运行时,如何使用C++;?Linux/Mac,macos,process,logged,Macos,Process,Logged,我有一个程序以root用户身份运行,并调用另一个程序来运行(a) 我想要以用户登录的身份运行。我使用了命令:su-'username'-ca 或者在一个主函数中,我调用了:setuid(当前\u uid\u记录) 但我不知道如何在根进程中登录用户名或uid 我尝试过的任何方法:getenv(“用户名”)或getlogin()始终返回root帐户。 我混淆了getlogin(),当内核启动并等待用户登录时,我的程序正在运行(我有一个线程等待查找程序(Mac OSX)运行以检测用户登录), 等待10
su-'username'-ca
或者在一个主函数中,我调用了:setuid(当前\u uid\u记录)
但我不知道如何在根进程中登录用户名或uid
我尝试过的任何方法:getenv(“用户名”)
或getlogin()
始终返回root
帐户。
我混淆了getlogin()
,当内核启动并等待用户登录时,我的程序正在运行(我有一个线程等待查找程序(Mac OSX)运行以检测用户登录),
等待10秒钟并调用getlogin()
,但有时它返回root
,但可以返回用户登录。我认为用户登录时Finder进程正在运行。但是当我用sudo
命令调用我的应用程序运行时,getlogin()
总是返回当前登录的用户
我该怎么做?如何处理
uid\u t getuid()
更多详细信息,请参见getlogin(3)
返回拥有进程控制终端的用户的名称。这与可能登录到操作系统GUI的用户的用户名无关。相反,getlogin(3)
和getuid(2)
将只返回启动程序的用户帐户的名称/uid——它们与进程历史记录的关系比坐在计算机前的任何用户都要大
对于环境变量USER
和LOGNAME
,也有类似的情况——如果在流程中设置了其中一个变量,则是由流程调用树中较高的流程设置的。它也不会受到最终坐在计算机前面的用户的影响
我确信有某种机制可以发现OS X机器上当前登录的用户,但它不会是传统的Unix API提供给您的。对我来说,这似乎是这个问题的重复:在哪里可以提供一个好的答案。