Linux笔记:后台运行命令与脱离终端运行命令

Posted Naisu Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux笔记:后台运行命令与脱离终端运行命令相关的知识,希望对你有一定的参考价值。

目的

linux中我们一般都是在终端中通过命令进行各种操作,通常情况下一个终端同一时间只能执行一条命令,并且如果关闭当前终端或者注销登陆当前正在执行的命令会被关闭。这些时候就需要通过一些方法来后台运行命令或是脱离终端运行命令了,这篇文章将对这个问题的一些基础处理方法进行说明。

后台运行命令

  • 将命令放入后台
    在命令后面加上 (空格) & 可以将命令放入后台执行;
    命令放入后台后会显示 [工作号] 进程号 信息;
    如有被放入后台执行的命令有输出,输出内容将在前台显示;
    放入后台的命令执行完成后会显示 [1]+ Done ... 内容(+表示最近放入的命令);
    除了上面方式也可以使用 ctrl+z 可以将当前正在执行的命令已暂停状态放入后台;
  • 查看在后台的命令
    使用 jobs 命令可以查看放入后台的命令,附加 -l 参数可以额外显示进程的PID号;
  • 将后台命令恢复到前台
    使用 fg 工作号 可以将在后台的命令恢复到前台,如果只是用 fg 则将恢复最后放入的命令到前台;
  • 将后台暂停的命令恢复为后台执行
    使用 bg 工作号 将后台暂停的命令恢复为后台执行;

脱离终端运行命令

使用上面的 & 或是 ctrl+z 将命令放入后台后,如果用户关闭终端或是注销登陆后后台和其中的命令就都被关闭了。如果想要在这些情况下命令还能持续运行可以使用下面的一些方式:

  • nohup 命令 &
    nohup 命令的功能是让命令可以忽略 SIGHUP 信号运行,通常会以 nohup 命令 & 方式使用;
    使用该方式时原本要输出到前台的内容会被写入到当前目录下一个名为 nohup.out 的文件中;
    上面演示中可以看到使用kill杀掉 nohup 放入后台的进程后其输出的nohup.out文件就不再更新了;
  • setsid 命令
    setsid后跟命令,命令直接就是在新会话中运行的,虽然信息还会在当前终端输出,但是并不在后台中,终端关闭了也不会停止;
  • disown
    前面两种方式都只对新创建的命令有效,但对于已经在运行的命令就得用 disown 才能使其脱离终端运行了;
    disown 移除最近的后台命令;
    disown -a 移除所有后台命令;
    disown -r 移除所有正在运行的后台命令;
    disown -h 不移除后台命令,但是让它们不会收到SIGHUP信号;

总结

本文中讲的后台运行命令与脱离终端运行命令只是一些最基础的方法,实际上linux中还有一些非常强大且好用的工具可以实现这些功能,且远远比上面的方法好用。最常见的工具比如 screentmux ,这些工具将在后面单独进行介绍。

以上是关于Linux笔记:后台运行命令与脱离终端运行命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux下使Shell 命令脱离终端在后台运行

Linux笔记:终端复用与管理工具screen和tmux

linux中nohup 与 & 的区别

CentOS7 开机启动脚本与命令后台运行

如何在后台运行Linux命令?

linux 如何后台运行