我正在为 osx 开发一个信息亭应用程序。这个应用程序的先前版本可以在 OSX 10.8 上运行,但是计算机已经更新,现在应用程序无法正常工作。我需要避免用户可以终止该进程。因此,让我们将主应用程序称为 A。“A”应该能够以任何用户身份以 root 身份运行,以避免被用户终止。我正在使用 LaunchAgent 在用户登录时自动启动它。以 root 身份运行 A 没有问题。由于 Launchctl 无法以 root 身份正确运行 A。我无法将 A 作为守护进程运行,因为它需要交互,我正在使用第二个名为“B”的程序,“B”以 root 用户身份对“A”进行系统调用,然后调用“exit”以避免“A”在“B”终止时被终止。如果我直接从终端运行 B,那么这可以工作,但是当 Launchctl 运行 B 并且它终止时,A 也会终止。我不知道如何解决这个问题,如何让“A”在“B”终止时仍以 root 身份运行。
这是 B 调用 A 的方式:
int main(int argc, const char * argv[])
{
system("sudo /Path/to/A & exit;");
}
system("sleep 15"); // trick that tell launchctl that everything was ok
return 0;
}