相关疑难解决方法(0)

如何运行可以在终端关闭后继续存在的命令?

有时我想开始一个过程并忘记它。如果我从命令行启动它,就像这样:

redshift
Run Code Online (Sandbox Code Playgroud)

我无法关闭终端,否则它会终止进程。我可以以可以关闭终端而不终止进程的方式运行命令吗?

command-line process terminal background-process

398
推荐指数
9
解决办法
55万
查看次数

如何在不杀死其子进程的情况下关闭终端(不先运行“screen”)?

有时我在 gnome-terminal 中运行一个应用程序,但后来我突然不得不重新启动 gnome 或其他东西。我想这个问题的答案也很有用,然后我想在发生某些事情的地方与 SSH 断开连接。

Gnome 的终端树如下所示:

gnome-terminal
    bash
        some-boring-process
Run Code Online (Sandbox Code Playgroud)

我可以bashgnome-terminal(或some-boring-process从 bash分离并将其输出重定向到某个地方)吗?如果我只是杀死gnome-terminalbash将被杀死以将其所有子进程

bash process kill terminal job-control

36
推荐指数
3
解决办法
4万
查看次数

暂停 bash 脚本,直到前面的命令完成

我有一个如下所示的 bash 脚本:

##script
#!/bin/bash
rm data*
rm logfile*
for i in {1..30}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &
done
Run Code Online (Sandbox Code Playgroud)

我想在第一个循环之后创建另一个 for 循环以继续另一个 30。例如

##script
#!/bin/bash
rm data*
rm logfile*
for i in {1..30}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &

for i in {31..60}
do
## append a …
Run Code Online (Sandbox Code Playgroud)

bash

34
推荐指数
3
解决办法
12万
查看次数

如果您已经使用 '&' 分叉,什么时候需要 'nohup'?

首先这个问题是相关的,但绝对不同于这个非常好的问题:

nohup、disown 和 & 之间的区别

我想了解一些事情:当我做 '&' 时,我是在分叉吗?

做“nohup ... &”是否有用,或者只是&足够?

有人可以展示您使用“&”但仍想使用“nohup”的情况吗?

shell nohup fork

32
推荐指数
2
解决办法
3万
查看次数

echo 0>file.txt 和 echo 0 > file.txt 有什么区别?

我看到这有这样的行为:

[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt

[root@divinity test]# cat file.txt

Run Code Online (Sandbox Code Playgroud)

我还注意到,如果我包含"",那么它会按预期工作:

[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0
Run Code Online (Sandbox Code Playgroud)

我想这只是 IO 重定向的一部分,但我不太明白在echo 0>做什么。

shell io-redirection

28
推荐指数
1
解决办法
4687
查看次数

进程后代

我正在尝试构建一个流程容器。容器会触发其他程序。例如 - 使用 '&' 启动运行后台任务的 bash 脚本。

我所追求的重要特性是:当我杀死容器时,它下面产生的所有东西都应该被杀死。不仅是直系子女,还有他们的后代。

当我开始这个项目时,我错误地认为当你杀死一个进程时,它的孩子也会自动被杀死。我曾向有同样错误想法的人寻求建议。虽然有可能捕捉到信号并将杀戮传递给儿童,但这不是我在这里要寻找的。

我相信我想要实现的目标,因为当你关闭一个 xterm 时,它里面运行的任何东西都会被杀死,除非它被 nohup'd。这包括孤立进程。这就是我想要重新创建的。

我有一个想法,我正在寻找的内容涉及 unix 会话。

如果有一种可靠的方法来识别进程的所有后代,那么能够向它们发送任意信号也会很有用。例如SIGUSR1。

process signals fork container

25
推荐指数
4
解决办法
2万
查看次数

`disown -h` 和 `nohup` 的工作效率是否相同?

disown

  • 导致 shell 在 shell 终止时不向其不承认的作业发送 SIGHUP,并且

  • 从 shell 的作业控制中删除被拒绝的作业。

第一个是第二个的结果吗?换句话说,如果从 shell 启动的进程以任何方式从 shell 的作业控制中删除,当 shell 终止时,shell 是否不会向该进程发送 SIGHUP?

disown -h 仍然使进程处于 shell 的作业控制之下。这是否意味着disown -h使进程仍然接收来自shell发送的SIGHUP,但将进程的SIGHUP动作设置为“忽略”?这听起来类似于nohup.

$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+  Running                 sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+  Stopped                 sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit

$ ps aux | grep sleep
t        26103  0.0  0.0  14584   824 ?        S    15:19   0:00 …
Run Code Online (Sandbox Code Playgroud)

bash nohup disown

22
推荐指数
2
解决办法
5117
查看次数

在后台运行多个 nohup 命令

得到两个命令 cmd1 和 cmd2。在这两者中,cmd2 需要更长的时间才能完成。需要先运行cmd2,然后再运行cmd1。

尝试以下列方式运行它们:

bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &
Run Code Online (Sandbox Code Playgroud)

或者

bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &
Run Code Online (Sandbox Code Playgroud)

但是两次我都可以看到 cmd1 没有等待 cmd2 完成并且 result1 被填满。

当两者都应该是 nohup 进程并在后台运行时,如何让 cmd1 在 cmd2 之后运行?

shell process nohup background-process

17
推荐指数
2
解决办法
6万
查看次数

尽管 nohup 关闭终端时,为什么铬浏览器会被杀死?

这个问题很老了,我仍然不清楚为什么。


2014 年的原始问题:

在 Gnome 终端选项卡中,我跑了

$ nohup chromium-browser &
Run Code Online (Sandbox Code Playgroud)

但是当我关闭终端选项卡时,chromium-browser也会退出。不nohup应该阻止吗?吉尔斯说:

nohup 和 disown 都可以说是抑制 SIGHUP,只是方式不同。nohup 使程序最初忽略信号(程序可能会改变这一点)。nohup 还尝试安排程序没有控制终端,以便在终端关闭时内核不会向它发送 SIGHUP。disown 纯粹是 shell 内部的;它会导致 shell 在终止时不发送 SIGHUP。

那么 nohup 不是让铬浏览器忽略 SIGHUP 吗?

我也在其他可执行文件上看到了这一点,例如 Emacs(GUI 模式)。但不是在 xeyes 上。

发布问题时,这发生在 32 位 Ubuntu 12.04 上。


2015年更新,

现在我运行的是 Ubuntu 14.04,google-chrome而不是chromium-browser安装。以前发生在 Chrome 浏览器上的事情现在也发生在 google-chrome 上。nohup google-chrome 2>/dev/null &当终端选项卡关闭时,它不会被关闭。/usr/bin/google-chrome是一个指向 bash 脚本的链接/opt/google/chrome/google-chrome。为什么nohup应用于 bash 脚本不起作用?我们如何让它在 bash 脚本上工作?Python脚本呢?

chrome nohup

14
推荐指数
1
解决办法
5177
查看次数

为什么 nohup 后台进程被杀死?

我尝试通过远程会话启动一个 shell 脚本,它使用命令在后台启动一个进程。

nohup python3 run.py > nohup.out &
Run Code Online (Sandbox Code Playgroud)

当远程会话关闭时,进程会被以下消息杀死:

捕获信号SIGHUP

SIGHUP 被捕获但没有被守护。退出。

我不明白;为什么进程在使用nohup &在后台启动时被杀死?

nohup background-process

11
推荐指数
1
解决办法
7156
查看次数