Linux 作业控制 &、disown 和 nohupLinux 作业控制 &、disown 和 nohupLinux 作业控制 &、disown 和 nohupLinux 作业控制 &、disown 和 nohup
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 作业控制 &、disown 和 nohup

介绍

Linux是一种在工业界广泛使用的开源操作系统。 Linux 最显着的功能之一是它的命令行界面 (CLI),它为用户提供了很大的灵活性和强大的功能。在命令行中工作时,通常会同时运行多个命令。但是,有时,您可能想要控制这些命令的执行方式以及它们如何相互交互。这就是作业控制的用武之地。

作业控制

作业控制是指管理和操作 Linux 系统中正在运行的进程的能力。它允许用户同时启动、停止、暂停、恢复和控制多个进程的执行。在Linux中,作业控制是通过一组内置的shell命令来实现的,例如bg、fg、jobs和kill。这些命令用于管理当前 shell 会话中的作业(即运行进程)。

后台执行

作业控制最常见的用例之一是在后台运行命令。这意味着执行命令时不会阻止 shell 提示符,从而允许您继续在同一 shell 会话中工作。要在后台运行命令,您可以在命令末尾附加与号 (&)。

例如,假设您想要运行一个需要很长时间才能完成的长时间运行的命令。您可以使用以下语法在后台运行命令 -

$ long_running_command &

shell 提示符将立即返回,并且命令将在后台执行。当命令在后台运行时,您可以继续在同一 shell 会话中工作。

管理后台作业

一旦开始后台作业,您可能需要对其进行管理,例如将其带到前台、发送到后台或终止它。以下是一些管理后台作业的最常用命令 -

  • jobs - 此命令显示当前 shell 会话中所有正在运行的作业的列表。它提供作业 ID、状态和命令等信息。

例如

$ jobs
[1]   Running                 long_running_command &
[2]-  Stopped                 another_command

上面的输出显示当前 shell 会话中有两个作业正在运行。第一个作业在后台运行,而第二个作业则停止。

  • fg - 此命令将后台作业带到前台,允许您直接与其交互。

例如

$ fg %1

上面的命令将 ID 为 1 的作业带到前台。您现在可以直接与作业交互。

  • bg - 此命令将停止或正在运行的作业发送到后台,允许其继续在后台运行。

例如

$ bg %2

上述命令将 ID 为 2 的作业发送到后台。作业将继续在后台运行。

  • kill - 此命令向正在运行的作业发送信号,允许您终止作业。

例如

$ kill %1

上述命令向 ID 为 1 的作业发送 SIGTERM 信号,终止该作业。

否认

Disown 是一个 shell 命令,用于从 shell 的作业控制中删除作业。当您拒绝某个作业时,它不再属于当前 shell 会话,并且不会从 shell 接收任何信号。这意味着即使您关闭 shell 会话,作业也将继续运行。

disown 的语法如下 -

$ disown [job ID]

例如

$ long_running_command &
$ disown %1

上述命令在后台启动一个长时间运行的命令,然后放弃它,将其从 shell 的作业控制中删除。这意味着即使您关闭 shell 会话,命令也将继续在后台运行。

诺哈普

Nohup 是一个实用程序命令,用于运行不受挂起影响的命令(即从终端断开连接)。当您使用 nohup 运行命令时,即使您注销系统、关闭终端窗口或丢失网络连接,它也会继续运行。

nohup 的语法如下 -

$ nohup [command]

例如

$ nohup long_running_command &

上面的命令在后台运行 long_running_command ,使其免受挂起的影响。这意味着即使您注销系统、关闭终端窗口或丢失网络连接,该命令也将继续运行。

当您正在运行一个长时间运行的命令并且您希望继续在后台运行(即使您没有连接到系统)时,Nohup 特别有用。

附加信息

除了作业控制、disown 和 nohup 命令的基本用法之外,还有一些附加功能和选项可用于微调其行为。这里有一些例子 -

作业控制

  • Ctrl + Z - 此键盘快捷键用于暂停正在运行的作业并将其发送到后台。这与 bg 命令类似,但它是在作业仍在运行时完成的。您可以使用 fg 命令将作业带回前台。

例如

$ long_running_command
^Z
[1]+  Stopped                 long_running_command
$ bg %1

上述命令启动一个长时间运行的命令,使用 Ctrl + Z 暂停它,然后使用 bg 命令将其发送到后台。

  • Ctrl + C - 此键盘快捷键用于通过向其发送 SIGINT 信号来终止正在运行的作业。这类似于带有 SIGINT 信号的 Kill 命令。

例如

$ long_running_command
^C

上面的命令启动一个长时间运行的命令并使用 Ctrl + C 终止它。

否认

  • -h 选项 - 此选项用于将作业标记为在 shell 收到 SIGHUP 信号时不会被终止。这类似于 nohup 命令,但它是在作业已经开始之后完成的。

例如

$ long_running_command &
$ disown -h %1

上述命令在后台启动一个长时间运行的命令,然后使用带 -h 选项的 disown 命令将其标记为不被终止。

诺哈普

  • -p 选项 - 此选项用于将 nohup 命令的进程 ID (PID) 写入文件。如果您需要监视命令的状态或手动终止它,这会很有用。

例如

$ nohup -p pid_file long_running_command &

上面的命令在后台启动一个长时间运行的命令,并使用带 -p 选项的 nohup 命令将其 PID 写入 pid_file。

  • -e 和 -o 选项 - 这些选项用于将命令的标准错误和标准输出流重定向到文件。这对于调试目的或记录命令输出很有用。

例如

$ nohup -e error_file -o output_file long_running_command &

上面的命令在后台启动一个长时间运行的命令,并使用带有 -e 和 -o 选项的 nohup 命令将其标准错误和标准输出流分别重定向到 error_file 和 output_file。

结论

总而言之,Linux 作业控制、disown 和 nohup 是功能强大的命令,为用户提供了很多灵活性以及对 Linux 系统中正在运行的进程的控制。作业控制允许您管理当前 shell 会话中正在运行的进程,而 disown 和 nohup 提供了一种运行不受挂起并脱离 shell 作业控制的进程的方法。

通过掌握这些命令,您可以显着提高在 Linux 命令行中工作时的生产力和效率。

©2015-2025 艾丽卡 support@alaica.com