如何在JXA中启动异步后台进程

时间:2019-06-10 20:27:24

标签: javascript macos cocoa automator javascript-automation

我正在尝试从JXA(自动化JavaScript)Mac应用程序运行HTTP服务器。这部分很容易,就像:

app.doShellScript("python -m SimpleHTTPServer");

(此处提供更多信息:https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Shell-and-CLI-Interactions

问题在于,执行完此操作后,由于shell脚本实际上并未退出,因此应用程序进程停止了。

那么……我们只需要使服务器作为后台进程运行就可以了吗?不幸的是,我尝试过的所有事情都没有将控制权转移回JXA应用程序

这是我尝试过的:

  1. app.doShellScript("nohup python -m SimpleHTTPServer > /dev/null <&- >&- 2>&- & disown");
  2. app.doShellScript("( python -m SimpleHTTPServer > /dev/null & )");
  3. $.system("( python -m SimpleHTTPServer & )");
  4. 编写了一个python脚本,该脚本将启动另一个运行服务器并退出的进程
  5. 在Node.js中尝试过同样的事情
  6. 尝试了将启动服务器并以exit 0结尾的shell脚本
  7. 尝试启动cron作业,该作业将立即启动将启动服务器的shell脚本,但是CRON似乎存在沙箱问题。
  8. 使用$.NSTask
  9. 进行各种黑客攻击

似乎最终的解决方案将涉及启动后台进程,而该进程将完全脱离JXA应用程序 100%零知识

1 个答案:

答案 0 :(得分:0)

因此,在系统重新启动后,事实证明这可行:

$.system("nohup python -m SimpleHTTPServer > /dev/null &");
console.log("Non-blocking!");

(感谢StackOverflow成为我的rubber duck。)