我对 Linux 世界非常陌生。我在联想笔记本电脑上运行 Ubuntu 15.04。我的终端仿真器是 Gnome Terminal。
我知道一些事情。假设我输入cd Documents/terminalpractice/python_folder
。然后我输入,例如touch askubuntu.py
。然后我使用命令gedit askubuntu.py
。
此时,文本编辑器 gedit 将在我的屏幕上打开,我可以随意尝试编写代码。但是,在终端窗口中,我猜 gedit“进程”正在运行?所以我无法使用终端,直到我关闭 gedit(我保存并单击顶角的“X”)。
为什么会发生这种情况?我可以使用图形界面打开文件夹,双击我的 askubuntu.py,它将在 gedit 中打开,而不会影响终端中正在发生的事情。我想知道为什么会发生这种情况。
答案1
为什么会发生这种情况?
当你刚刚运行时:
gedit filename
它在前台运行该进程。要将其发送到后台并继续使用终端,请使用:
gedit filename &
请注意,这个(当然还有上面的)将gedit
作为终端的子进程运行,所以当你退出终端时它也会退出gedit
。
因此,为了“优雅地”运行它,请使用:
nohup gedit >/dev/null &
nohup
将以与终端分离的方式运行 gedit,因此它不会挂断。>/dev/null
将标准输出重定向到特殊位置dev/null
,从而阻止创建nohup.out
文件。
查看man nohup
这询问更多信息。
答案2
这是正常的。如果您运行一个命令,终端在完成该命令之前不会获取另一个命令。按您想要的方式执行命令是按 ALT + F2 并输入您需要的命令。
如果您在终端中执行此操作,它将不会接受另一个命令,直到当前命令的指令结束。
答案3
这就像运行文本模式的程序或应用程序:它开始运行,并且终端(不是终端,而是命令解释器)在应用程序运行完成之前不可用。例如,运行“nano”,您将看到相同的行为(命令解释器在应用程序运行时“退出”)。
仅仅因为应用程序(gedit)打开了一个额外的图形窗口并不会改变底层的基本行为。
当你在终端上启动命令时,你可以使用 & 要求命令解释器在后台运行该命令:
gedit blahblah &
如果命令已在运行(终端“锁定”),您可以按 ctrl-z(暂停当前运行的进程 - 请注意 gedit 窗口将变得无响应),然后输入bg
(将暂停的进程发送到后台)。
答案4
这是因为您是gedit
从终端在前台启动的。以这种方式运行的任何命令都会占用命令提示符,直到命令完成为止。因此,当您退出由 打开的窗口时,您的终端提示符将再次起作用。您可以在命令末尾gedit
放置 ,以在后台运行命令。&
您可以使用该jobs
命令查看已启动的所有后台命令。
如果您已经正常运行该命令,您也可以按Ctrl+Z来暂停该命令,然后通过键入 将其发送到后台bg
。