是否有可能将 upstart 启动的进程置于前台?
root@me:~# ps aux | grep my-app
root 2208 0.2 0.0 1456 480 ? S 17:38 0:01 /opt/me/my-app
root@me:~# fg 2208
-bash: fg: 2208: no such job
root@me:~# fg $(pidof my-app)
-bash: fg: 2208: no such job
答案1
fg
需要作业编号,而不是 PID。没有可用的作业编号,因为由 启动的任何进程upstart
都不是 shell 的子进程。它不会出现在jobs
输出中。
尝试reptyr
,例如:
reptyr 2208
从它的手册页:
reptyr
是一个用于获取现有正在运行的程序并将其附加到新终端的实用程序。
请不要错过以下提示:
reptyr
取决于ptrace(2)
附加到远程程序的系统调用。在 Ubuntu Maverick 及更高版本中,出于安全原因,此功能默认被禁用。您可以通过执行以下操作暂时启用它echo 0 > /proc/sys/kernel/yama/ptrace_scope
以 root 身份进行设置,或者通过编辑文件来永久更改
/etc/sysctl.d/10-ptrace.conf
,该文件还包含有关此设置的更多信息。
(阅读更多这是我的另一个答案。
还请注意,这reptyr
仅将进程附加到另一个终端。这并不意味着该进程成为当前 shell 的子进程。
答案2
该fg
命令需要job_id而不是进程id,您需要运行该jobs
命令并获取进程的job_id