有时我想开始一个过程并忘记它。如果我从命令行启动它,就像这样:
redshift
Run Code Online (Sandbox Code Playgroud)
我无法关闭终端,否则它会终止进程。我可以以可以关闭终端而不终止进程的方式运行命令吗?
我想要一个这样的shell脚本:
my-app &
echo $my-app-pid
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何获取刚刚执行的命令的pid。
我知道我可以只使用jobs -p my-app命令来grep pid。但是如果我想多次执行shell,这个方法就行不通了。因为工作规范是不明确的。
我已经在后台使用&. 突然停止下载。我想终止它的进程,然后重新运行命令。我怎样才能终止它?
我还没有关闭它的外壳窗口。但正如你所知,它不会停止使用Ctrl+C和Ctrl+ Z。
有时我想在回家之前启动一个长时间运行的进程,所以我创建了一个到服务器的 SSH 会话来启动这个进程,但是我想关闭我的笔记本电脑回家,晚饭后,我想检查我在下班前开始的过程。我怎样才能用 SSH 做到这一点?我的理解是,如果您中断 SSH 连接,您也会中断服务器上的登录会话,从而终止长时间运行的进程。
我有一个最初在前台运行的进程。我通过Ctrl+暂停Z,然后通过 恢复其在后台运行bg <jobid>。
我想知道如何挂起在后台运行的进程?
如何将后台进程带到前台?
编辑:
进程输出到stderr,那么我应该如何fg <jobid>在进程输出到终端时发出命令?
在 CLI 上,有时我输入的命令需要一段时间才能完成,有时我知道什么时候会发生。我对 Linux 中的“背景”等有些困惑。
告诉 CLI 我不想等待的最常见(或用户友好的方式)是什么,请立即给我回提示。如果它能给我一个进度条或只是忙碌的微调器,那就太好了!
我不小心“停止”了我的telnet进程。现在我既不能“切换回”它,也不能杀死它(它不会响应kill 9292992929 是进程 ID。)
所以,我的问题是,如果你在 linux 命令行上有一个停止的进程,你如何切换回它,或者杀死它,而不必求助于kill -9?
我有一个程序可以生成有用的信息,stdout但也可以从stdin. 我想将其标准输出重定向到一个文件,而不在标准输入上提供任何内容。到目前为止,很好:我可以做到:
program > output
Run Code Online (Sandbox Code Playgroud)
并且不要在 tty 中做任何事情。
但是,问题是我想在后台执行此操作。如果我做:
program > output &
Run Code Online (Sandbox Code Playgroud)
程序将被挂起(“挂起(tty 输入)”)。
如果我做:
program < /dev/null > output &
Run Code Online (Sandbox Code Playgroud)
程序立即终止,因为它到达 EOF。
似乎我需要的是将program某些内容导入到无限期不执行任何操作且不读取的内容中stdin。以下方法有效:
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
Run Code Online (Sandbox Code Playgroud)
然而,这一切都非常难看。有有是一种优雅的方式,使用标准的Unix工具,以“什么都不做,无限期”(意译man true)。我怎么能做到这一点?(我这里优雅的主要标准:没有临时文件;没有忙碌等待或定期唤醒;没有异国情调的实用程序;尽可能短。)
我很迷茫。从手册页:
-f Requests ssh to go to background just before command execution.
Run Code Online (Sandbox Code Playgroud)
使用该-f选项启动 SSH 后,我有一个工作隧道。但是用完之后不知道怎么和它进一步交互。例如,当我完成它时,我无法关闭 SSH 隧道。
我知道的常用方法不起作用。例如,不jobs返回任何内容。该~命令无法识别(无论如何我不知道如何使用它)。
但是,pgrep告诉我 SSH 隧道仍在运行(在我关闭终端等之后)。我如何与它互动?我该如何关闭它?
我想在单个 shell 上运行多个命令(进程)。都有自己的连续输出,不停歇。在后台运行它们Ctrl- C。我想将它们作为单个进程(子shell,也许?)运行,以便能够用Ctrl-停止所有这些进程C。
具体来说,我想使用mocha(监视模式)运行单元测试,运行服务器并运行一些文件预处理(监视模式),并在一个终端窗口中查看每个测试的输出。基本上我想避免使用一些任务运行器。
我可以通过在后台运行进程 ( &)来实现它,但是我必须将它们放到前台来阻止它们。我想要一个包装它们的过程,当我停止这个过程时,它会停止它的“孩子”。
command-line ×6
process ×5
bash ×3
job-control ×2
shell ×2
ssh ×2
jobs ×1
kill ×1
shell-script ×1
stdin ×1
stdout ×1
terminal ×1