0

我有一个以 root 身份运行的程序并调用另一个程序来运行(A)。

我希望 A 在用户登录时运行。我用过命令:su - 'username' -c A

或在 A main 函数中,我调用了:setuid(current_uid_logged).

但我不知道在 root 进程中获取用户名登录或 uid 的方法。

我尝试过的任何方式:getenv("USERNAME")getlogin()总是返回root帐户。我很困惑getlogin(),当内核启动并等待用户登录时,我的程序正在运行(我有一个线程等待 Finder 进程(Mac OSX)运行以检测用户登录),等待 10 秒并调用getlogin(),但有时,它返回root但可以返回用户登录。我认为 Finder 进程在用户登录时正在运行。但是当我调用我的应用程序以使用sudo命令运行时,getlogin()总是返回当前用户登录。

我该怎么做呢?

4

2 回答 2

1

getlogin(3)返回拥有进程控制终端的用户的名称。这与可能登录操作系统 GUI 的用户的用户名无关。相反,getlogin(3)并且只会返回启动getuid(2)程序的用户帐户的名称/uid——它们与进程历史的关系比坐在计算机前的任何用户都多。

USER环境变量也有类似的故事LOGNAME——如果在进程中设置了任何一个,那么它是由进程调用树中更高的进程设置的。它也不会受到最终坐在计算机前的任何用户的影响。

我确信有一些机制可以发现 OS X 机器上当前登录的用户,但它不会是提供给您的传统 Unix API。

于 2011-11-17T03:23:35.013 回答
0

怎么样uid_t getuid()

更多详细信息,请访问http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/getuid.2.html

于 2011-11-17T03:19:33.240 回答