Linux 如何从终端启动命令,使终端不是父级?
让我们以命令“示例命令”为例Linux 如何从终端启动命令,使终端不是父级?,linux,command-line,terminal,Linux,Command Line,Terminal,让我们以命令“示例命令”为例 我打开终端 我在终端中写入示例命令,然后执行示例命令 现在,如果我关闭终端,示例命令也会被杀死 我现在尝试使用“示例命令&”,但行为相同 如何执行命令,以便在关闭终端时,命令不会终止?在Zsh(非bash)中,您可以: 或者只是 example-command &; disown 有两种方法,结果相同 启动程序时请使用nohup。例如,nohup示例命令。你可以在后台正常使用它;它将在您退出后继续运行 或者,如果使用bash作为shell,则可以使用dis
示例命令
,然后执行示例命令
示例命令
也会被杀死示例命令&
”,但行为相同example-command &; disown
有两种方法,结果相同
nohup
。例如,nohup示例命令
。你可以在后台正常使用它;它将在您退出后继续运行disown
命令。不幸的是,据我所知,disown
是bash特有的;如果您使用另一个shell,例如tcsh
,您可能会被限制使用上面的nohup
表单nohup示例命令您还可以使用并为其指定当前时间 不承认是一种自相矛盾的行为。您可以为命令创建一个包装shellscript,例如
#!/bin/bash
$1 &
P=`which $1`
disown `pidof ${P}`
虽然不是最健壮的脚本(无论如何),但可能会帮助您继续。例如:
$./launch_script.sh myProgram
setsid xclock
你也可以在程序的源程序中编辑它。
你也可以考虑使用命令。
< P>请先搜索类似的问题。 除上述方法外,您还可以执行以下操作:setsid command_name
例如:
$./launch_script.sh myProgram
setsid xclock
谢谢运行:示例命令
按:Control-Z
运行:bgzsh也支持disown。哦,现在我记得了,我以前用过
nohup
!从bash手册页上看,似乎需要“-h”选项来忽略SIGHUP--“disown-h”。这两个选项都解决了杀戮问题,但父进程仍然是shell。另一方面,setsid
在新会话中启动命令。尝试运行ps-o cmd=$(ps-o ppid=$(pidof示例命令))
以获取父进程名称。>>请先搜索类似问题。是的。先生,您的示例不处理参数(使用“$@”)。您可以使用“$!”作为最后一个后台作业的PID。但不需要PID。您应该忽略SIGHUP,所以使用“nohup”或“disown-h”。感谢NVRAM,我已经有一段时间没有编写任何shell脚本了:)我喜欢这个,但很少使用它。为了简化,只需使用“at now”(无需计算日期/时间)。符号和后的分号是一个语法错误。在bash中,PID是可选的,并且需要“-h”。所以这应该是:“example command&disown-h”,但这不会重定向stdin/stdout/stderr;disown在zsh中对我来说很好。如果bash不支持其中任何一个(;after&或disown,无参数),那么:不要告诉我你不知道它很糟糕。我同意@NVRAM。我更新了答案,说它可以在Zsh中工作,但不能在bash中工作。这与运行example命令&
相同,但不起作用<代码>示例命令仍然作为子进程运行。我建议您使用screen。screen vi Control+a d[将解除连接]screen-r[将重新连接]您可以关闭终端,几天后再回来,与该用户一起执行screen-r。您可以有多个屏幕会话。或者它的现代替代方案,tmux
。