【发布时间】: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不用
nohup;nohup可以做的所有事情,您都可以使用重定向和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的代码中运行。