【问题标题】:What happens if you kill a bash script containing a single nohup command? [duplicate]如果你杀死一个包含单个 nohup 命令的 bash 脚本会发生什么? [复制]
【发布时间】:2018-07-31 19:18:38
【问题描述】:

我刚刚了解了nohup,它到目前为止非常有用——我的工作并没有因为我的 ssh 会话意外断开而崩溃。

如果我在提交nohup 工作后执行ctrl-C 会发生什么情况?有人能告诉我吗?我希望它继续运行。开始工作后它说

$ nohup: appending output to ‘nohup.out'

但它并不需要我重新输入一行来执行其他命令。

谁能解释为什么我的命令结束时需要&

nohup sh -c 'for file in ../orig_data/merged/*Inp*.gz; do zcat $file | bowtie2 -p 8 -q -x hg_mm -U - -S "${file:20:-9}".sam; done' &

编辑:此 nohup 命令位于以 ./job.sh 执行的 bash 脚本中。那么如果我杀死这个 bash 脚本,它是否也会杀死我的 nohup 命令?

【问题讨论】:

  • & 将您的命令作为后台进程(即在您的外壳之外)运行。您需要阅读此内容。
  • 顺便说一句,一般情况下,写得好的bash不用nohupnohup 可以做的所有事情,您都可以使用重定向和 disown 命令自行完成 - 自己进行重定向意味着您可以更好地控制日志的发送位置。
  • 当你说“不带你到新的输入行”时——新的输入行是你的输出行开头的$。因为&,nohup 在后台运行,所以提示符会打印出来之前 nohup 完成启动。如果你只是再次按回车,你会得到一个新的提示。
  • 我将它链接到一个单独的副本来解释这一点。也就是说,告诉您使用 nohup 的人可能并不特别了解 bash。 sh(更有限的外壳)可能需要它,但bash 更强大。
  • 考虑例如:for file in ../orig_data/merged/*Inp*.gz; do bowtie2 -p 8 -q -x hg_mm -U - -S "${file:20:-9}".sam < <(zcat "$file") & disown -h "$!"; done >bowtie.log 2>&1 </dev/null;请注意,这只能在带有 #!/usr/bin/env bash#!/bin/bash 或其他 bash shebang 的代码中运行,而不是在带有 sh 的代码中运行。

标签: linux bash nohup


【解决方案1】:

任何 shell 命令末尾的 & 符号将您的进程置于后台,以便您可以继续与终端交互,同时,您的命令在后台执行。

【讨论】:

  • 你的意思是&
  • 我猜你的意思是“& 符号”,而不是“$ 符号”:)
  • 是的。编辑了我的答案。正在我的手机上打字。很难按右键。
  • 我发布的 nohup 命令在 bash 脚本中,所以这一定是它似乎没有在后台运行并且我无法输入新命令的原因。如果我终止脚本,我的 nohup 命令会停止吗?
  • 无论如何。如果你的 nohup 之后有下一个命令(带 &),它应该立即执行。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2011-09-04
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多