从用户上下文中的守护进程启动代理

2024-02-28

我有一个启动守护程序,它在 Mac OSX 10.6 计算机的登录上下文中运行。我想从该代理为每个用户启动一个代理,并让该代理在用户的登录上下文中运行。但是,我需要非常仔细地控制代理应用程序的精确参数,这就是为什么我不能使用 launchd 代理,就像我对守护进程所做的那样。

如何创建在登录用户的上下文中运行的进程?我已经做到了seteuid and setuid调用,但这些不会更改代理应用程序的执行上下文。

我知道这不是推荐的 Apple 做事方式,但我在这件事上实际上没有选择 - 守护程序应用程序的设计非常不灵活(它必须在许多不同的系统上运行)。是否有一种解决方法允许我从登录上下文中运行的守护程序在登录用户的 GUI 上下文中运行应用程序?

我正在使用 C++、Carbon 和 Cocoa。


使用启动代理。所有其他方式都会有大量无用的细节和隐藏的技巧让你大吃一惊。一般来说,这是一个非常复杂的任务,有很多极端情况,很难正确实施。 Launchd 代理将让您专注于您的任务并节省大量时间。

最适合您的解决方案是重写代理不使用命令行,而是连接到 launchd 守护程序并要求正确的选项/设置。

如果不可能或很难,您可以编写包装器 launchd 代理,该代理将在启动时连接到守护程序,询问选项,然后使用正确的命令行启动原始代理。

如果您认为实现“连接到守护进程”机制太难......也许是这样,但它比从守护进程在其他会话中启动代理要容易得多(当在不同的极端情况支持下正确实现时)。

但如果你真的-真的-无论如何-想要以肮脏的方式得到它,你可以使用“launchctl bsexec”。一些有效的例子:使用 GUI 会话为所有用户启动/停止 launchd 代理 https://stackoverflow.com/questions/1106638/starting-stopping-a-launchd-agent-for-all-users-with-gui-sessions(它可以在会话上下文中启动任何可执行文件,而不是“launchctl load”)。

对此的一些更新。

我所说的“使用 launchctl bsexec”我的意思是这样的:

ps aux | grep loginwindow | grep user | awk '{ system("sudo launchctl bsexec "$2" sudo -u user /Applications/TextEdit.app/Contents/MacOS/TextEdit") }'

在会话中找到您想要的某个应用程序,获取其 PID 并调用“launchctl bsexec”以在同一会话中运行您想要的应用程序。上面的示例将在登录的“用户”会话中启动 TextEdit,即使该行在另一个登录的用户帐户或服务中执行。

但我在 Lion 上测试了它 - 它不起作用。对我来说,它仅适用于 Leopard(10.5 / 10.6)。 这就是我想说的——不使用发射剂只会让你的屁股持续疼痛,仅此而已。经过十几次这样的事情之后,我们完全转向了启动代理,现在很高兴:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从用户上下文中的守护进程启动代理 的相关文章

随机推荐

  • WPF - 当 ItemsSource 更改时重置 ListBox 滚动位置

    我当前有一个 ListBox 其 ItemsSource 集合绑定到我的视图模型上的 IEnumerable 类型的属性 当该 preoprty 的引用更改时 列表框会按预期更新 但是我有一个问题 如果我有大量项目集合并滚动到列表框的底部
  • 禁用 Laravel 中的速率限制器?

    有没有办法禁用 Laravel 中每个 单个路由的速率限制 我正在尝试测试接收大量请求的端点 但 Laravel 会随机开始响应 status 429 responseText Too Many Attempts 数百个请求使得测试变得非常
  • KeyVault 为何比标准存储更安全?

    我试图了解 Azure Key Vault 或同样的 AWS KMS 提供的安全优势 我了解密钥管理的好处 即能够轻松轮换 更改 审核密钥访问 但让我有点困惑的是它如何更安全 据我了解 如果我开发一个 Web 应用程序并想要保护我的连接字符
  • 使用 cakephp 3 上传文件并将其存储在 blob 中

    我知道在数据库中存储文件有点脏 但我需要上传文件并将其存储到数据库 BLOB 中 并且我没有找到任何有关它的文档 也没有找到任何线索 所以有关的任何帮助我们将不胜感激 提前致谢 大卫 您不需要做任何特别的事情 只需将要存储在适当的实体属性
  • 在 $_POST 值中不使用引号、单引号和双引号[重复]

    这个问题在这里已经有答案了 可能的重复 我应该对单引号使用 php 引号转义还是在数组中使用双引号 https stackoverflow com questions 2317959 should i use php quote escap
  • 要上传到 Google 云端硬盘的 URL

    有没有可以用来直接上传到 Google 云端硬盘的 URL 例如 我的服务器上有一个文件http example com file doc我想将其上传到 Google Drive 如下所示 http google com upload ht
  • 检查是否有元素包含特定的 css 样式

    我想知道元素包含任何 css 样式的检查过程 我有以下 html 代码 ul li text 1 li li text 2 li li text 3 li ul 我想找出样式左侧为 0px 的 li 然后想对该 li 应用更多样式 Than
  • Subsonic - 如何使用 SQL 架构/所有者名称作为命名空间的一部分?

    我刚刚开始使用 Subsonic 2 2 到目前为止印象深刻 认为它会节省我一些认真的编码时间 在我开始全职使用它之前 尽管有些事情困扰着我 我想解决一下 在我当前的数据库 SQL2008 数据库 中 我已按架构 所有者名称将表 视图 sp
  • 是否可以通过插件在 Firefox 上设置配置设置

    我正在寻找一种从网络打印而不提示打印对话框的方法 我刚刚提出了问题 https stackoverflow com questions 5809102 how to print from web without prompting a pr
  • 如何进行函数复合?

    在相当不耐烦地等待 Java 8 发布并阅读精彩文章之后Brian Goetz 的 Lambda 状态 文章 http cr openjdk java net briangoetz lambda lambda state final htm
  • 操作必须使用可更新查询/SQL - VBA

    我正在尝试创建一个非常动态的宏 它将根据用户的选择更新数据库中的不同表 当然 每个表都有不同的标题和信息 我在更新时遇到问题 当用户将新记录添加到旧表时 这是代码的一部分 问题是当它到达 update 时 我收到 操作必须使用可更新查询 错
  • Hibernate:为什么 FetchType.LAZY 注释的集合属性急切加载?

    我尝试实现简单的one to many协会 使用调试模式检查项目对象后 我发现List
  • scrapy中如何根据url过滤重复请求

    我正在使用 scrapy 和 CrawlSpider 为网站编写一个爬虫 Scrapy 提供了一个内置的重复请求过滤器 可以根据 url 过滤重复请求 另外 我可以使用过滤请求rules爬行蜘蛛成员 我想做的是过滤请求 例如 http ww
  • matplotlib:子图背景(轴面+标签)颜色[或图/轴坐标系]

    我有一个包含 3x2 子图的图形 我想在中间一对子图上设置背景颜色 以便更清楚哪些轴标签属于哪个子图 Setting facecolor构建子图时 仅更改轴定义的区域的颜色 刻度线和轴标签仍然绘制在figure patch 假设没有简单的方
  • ionic 使用获取上一页名称

    我用的是离子2 我需要获取上一页的名称 这是我的代码 ViewChild Nav nav Nav constructor this nav app viewDidEnter subscribe view gt console log Cur
  • 在 Openlayers 中单击地图外部时如何激活功能 + 弹出窗口?

    我正在重新解析已加载到地图上的 KML 类似于此处的示例 http openlayers org dev examples sundials html http openlayers org dev examples sundials ht
  • 适用于 SQL Server 的 Microsoft OLE DB 提供程序是否支持 TLS 1.2

    我们的客户端最近从 TLS 1 0 升级到 TLS 1 2 此后我们的软件无法与 SQL Server 连接 它使用 OLE DB 提供程序连接到 SQL 服务器 以下是从 SQL 服务器返回的错误 DBNETLIB ConnectionO
  • 有什么方法可以在不更改格式的情况下比较 Git 中的两个文件吗?

    我已经提交了一些具有某种格式的代码 但源有一些其他格式 审阅者要求我恢复所有更改 我正在寻找一些 UI 工具或 Git 中的某种方式来删除格式并给出实际结果 我想你可能会看看 git diff 特别是以下两个选项 b ignore spac
  • Qt Mac(删除编辑菜单中的“特殊字符...”操作

    我正在 Qt 中开发一个应用程序 它经常重建其菜单 然而 当我们调用clear 并在菜单中重新添加我们想要的操作时 特殊字符 似乎保留在菜单中 有什么方法可以删除或将此操作移动到 QMenu 的底部吗 这是重建菜单的代码 void Main
  • 从用户上下文中的守护进程启动代理

    我有一个启动守护程序 它在 Mac OSX 10 6 计算机的登录上下文中运行 我想从该代理为每个用户启动一个代理 并让该代理在用户的登录上下文中运行 但是 我需要非常仔细地控制代理应用程序的精确参数 这就是为什么我不能使用 launchd