首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"<command> & <command> & disown“与"nohup <command>& disown”的区别

"<command> & <command> & disown“与"nohup <command>& disown”的区别
EN

Ask Ubuntu用户
提问于 2015-04-21 09:22:51
回答 2查看 44.2K关注 0票数 56

这是我对&disownnohup的用法的理解:

  • <command>:在前台运行终端当前bash实例中的进程(即进程被列为bash前台作业,stdinstdoutstderr仍然绑定到终端);
  • <command> &:在后台运行终端当前bash实例中的进程(即进程被列为bash后台作业,stdinstdoutstderr仍然绑定到终端);
  • <command> & disown:在后台运行终端当前bash实例中的进程,但进程与bash**'s作业‘列表分离(即进程不作为bash前台/后台作业列出,stdinstdoutstderr仍然绑定到终端);不受干扰**;
  • nohup <command> & disown:在后台运行终端当前bash实例中的进程,但进程与bash**'s作业‘列表分离(即进程不作为bash前台/后台作业列出,stdinstdoutstderr仍然绑定到终端);

因此,除了默认情况下nohup <command> & disown阻塞stdin并将stdoutstderr重定向到nohup.out之外,在我看来,它似乎完全等同于<command> & disown

以上都是正确的吗?有误解吗?

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2015-04-21 15:51:58

你的理解基本上是正确的。disownnohup都用于允许您在不停止运行作业的情况下退出正在运行的shell会话。一些澄清:

  • 没有理由运行nohup command & disownnohup已经不承认它了。
  • nohup由POSIX定义disown 不是是。这意味着许多shell(例如bashzshksh)都有它,而其他shell(例如tcshcshdashsh)则不会拥有它。
  • disown可以在命令启动后使用,而nohup必须在此之前使用。

据我所知,这两个命令的实际效果是一样的。它们都有其他人所缺乏的特性(请参阅help disownman nohup),但它们的基本功能是相同的,是的。

要更详细地讨论这些工具以及它们之间的差异,请看下面的答案:

票数 50
EN

Ask Ubuntu用户

发布于 2015-04-21 09:51:05

虽然stdin, stdout and stderr are still bound to the terminal不是一个正确的概念,但您的第一点到第三点似乎还不错。stdin总是绑定到终端,因为您总是通过终端或使用终端的方式将文件名输入到命令中。stdout and stderr are still bound to the terminal很好。

您在第四点中使用了stdin, stdout and stderr are not still bound to the terminal,这与我在前面一段中提到的不对。这里还使用/dev/null作为command的输入文件,例如,如果命令是cat,则使用它作为cat /dev/null

第5点上的命令没有正确放置,您使用了nohup <command> & disown,而使用了nohupdisown中的任何一个,而不需要另一个。它们的目的是相同的(忽略SIGHUP),但它们的工作方式略有不同。因此,可以将该命令简化为nohup <command> &

票数 7
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/611968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档