Macos 在根进程运行时,如何使用C++;?Linux/Mac

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

我有一个程序以root用户身份运行,并调用另一个程序来运行(a)

我想要以用户登录的身份运行。我使用了命令:
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提供给您的。

对我来说,这似乎是这个问题的重复:在哪里可以提供一个好的答案。