linux后台运行的几种方式(小结)

1、nohup

将程序以忽略挂起信号的方式运行起来

补充说明
nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。
如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。
如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

简单实例:

nohup command &

指定输出实例

nohup command > myout.file 2>&1 &

其他相关命令
ctrl + z #可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
fg #将后台任务切换到前台执行
bg #将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出
jobs #查看后台运行的状态,jobs -l选项可显示所有任务的PID
ps -ef | grep command 或者 ps aux | grep command #查看进程
kill -9 进程id #杀掉对应的进程,

更高级的用法如下:

ps aux | grep command | grep -v grep | awk '{print $1}' | xargs kill -9 #这个表示直接通过command获取进程id并直接kill掉

2、screen

用于命令行终端切换

a、会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,
用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。
同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)

b、多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,
并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,
可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户
从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,
可以对窗口进行密码保护。

c、screen的安装

yum install -y screen

基本语法
screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

选项
-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

常用screen参数
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(Ctrl + a) 开始。

Ctrl + a ? -> 显示所有键绑定信息
Ctrl + a c -> 创建一个新的运行shell的窗口并切换到该窗口
Ctrl + a n -> Next,切换到下一个 window
Ctrl + a p -> Previous,切换到前一个 window
Ctrl + a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
Ctrl + a Ctrl + a -> 在两个最近使用的 window 间切换
Ctrl + a x -> 锁住当前的 window,需用用户密码解锁
Ctrl + a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
Ctrl + a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
Ctrl + a w -> 显示所有窗口列表
Ctrl + a t -> time,显示当前时间,和系统的 load
Ctrl + a k -> kill window,强行关闭当前的 window
Ctrl + a -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 [vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
Ctrl + a ] -> paste,把刚刚在 copy mode 选定的内容贴上

操作示例见:https://wangchujiang.com/linux-command/c/screen.html

3、daemonize工具

##安装
git clone git://github.com/bmc/daemonize.git
sh configure && make && sudo make install

-a #挂载到输出文件,而不是冲掉默认值。只有应用了-e and/or -o 被指定的情况。
-e #重定向输出标准错误到指定的文件中,替代/dev/null
-o #重定向输出标准到指定的文件中,替代/dev/null
-E name=value #增加环境变量给给后台程序。这个这个参数类型一定要是name=value格式。参数可以设置多次。
-c directory #定制运行命令前的目录。
-p pidfile #定制自己的pid存放位置。
-l lockfile #单实例启动时将会检查这个文件。
-u user #定制程序以谁的身份运行的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux nohup实现后台运行程序及查看(nohup与&)

    1. 后台执行 一般运行linux上的程序都是执行 .sh 文件(./sh文件),那如果不影响当前CMD窗口的操作,需要后台运行怎么办呢? 这时就需要借助 nohup 和 & 命令来实现. nohup java -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -jar test.jar $1 $2 $3 & (1) nohup  加在一个命令的最前面,表示不挂断的运行命令 (2) & 加载一个命令的最后面,表示这个命令放在后台执行

  • 在Linux中查看及终止正在运行的后台程序方法

    linux 任务管理-后台运行与终止 fg.bg.jobs.&.ctrl + z命令 一. & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境

  • Linux中jar包启动和jar包后台运行的实现方式

    Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu.jar & &代表在后台运行. 特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 继续改进,如何让窗口关闭时,程序仍然运行? 方式三 nohup java -jar shareniu.jar & nohup 意思是不挂断运行

  • 详解linux后台运行和关闭、查看后台任务

    fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态. 三.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated.但是如

  • Linux查看和关闭后台运行程序的方法

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这个命令放在后台执行 (2)nohup命令 功能:不挂断的运行命令 2.查看当前后台运行的命令 有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了.而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程. (1)jobs命令 功能:查看当前终端后台运行的

  • 解决python nohup linux 后台运行输出的问题

    遇到问题 nohup python flush.py & 这样运行,生成了nohup.out文件,但是内容始终是空的,试了半天也不行.浪费了不少时间. 原因 python的输出又缓冲,导致out.log并不能够马上看到输出. -u 参数,使得python不启用缓冲. 解决 nohup python -u flush.py > flush.log 2>&1 & 终于好了! 以上这篇解决python nohup linux 后台运行输出的问题就是小编分享给大家的全部内容了,

  • springboot 在linux后台运行的方法

    首先需要进到自己springboot项目的根目录,然后执行如下linux命令 nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 & 命令详解: nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程. >日志文件名.log:是nohup把command的输出重定向到当前目录的指定的"日志文件名.log"文件中,即输出内容不打印到屏幕上,而是输出到"日志文件名.log"文件中

  • 浅析Linux中使用nohup及screen运行后台任务的示例和区别

    使用SSH终端(比如putty,xshell)连接Linux服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,我们还要做其他的任务呢,所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,有下面这些常用方法来实现这个需求. command & 在终端输入command &运行,这时候使用Ctrl + C中止命令将会失效,因为对&后台运行SIGINT1信号免疫,程序会继续运行. 但如果你直接关掉终端, 进程将跟着中止. 可见,使用&后台运行

  • linux 后台运行node服务指令方法

    启动node 服务时候发现 node servier.js跑起来之后,一旦断开连接,服务也就停了, 使用 nohup node servier.js & 就可以让代码运行在后台,exit 命令退出命令行即可 以上这篇linux 后台运行node服务指令方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Linux安装Redis、后台运行、系统自启动的设置方法

    Redis是用C语言编写的开源免费的高性能的分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库. 安装 1)从官网http://download.redis.io/releases/ 下载redis压缩包,如redis-5.0.3.tar.gz 2)上传Linux服务器目录opt,解压文件包 tar -zxvf redis-5.0.3.tar.gz,文件夹名称 redis-5.0.3 3)剪切目录 mv redis-5.0.3 /usr/local/redis 进入文件夹目录,执行ma

  • Linux后台运行Python程序的几种方法讲解

    1.第一种方法是直接用unhup命令来让程序在后台运行,命令格式如下: unhup python 文件名.py (> ***.log )& 在这个命令中,python指定我们要执行的文件为python文件,后面的文件名.py即是我们要执行的文件.括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个,则会默认输出到nohup.out文件中.括号后面你的&表示后台运行. 2.第二种方法是写一个脚本,然后把脚本提交给服务器,让服务器在后台运行脚

  • 在后台运行Linux命令的方法

    通常情况下,当你在终端运行一个命令,在你开始输入另外一个命令之前,你必须等待当前命令运行结束.这被称为在前台运行命令,或者前台进程.当一个进程在前台运行时,它占用了你的 shell,并且你可以通过输入设备和它进行交互. 那么当一个命令运行需要很长时间,而你又想同时运行另外的命令,应该怎么办?有几种选项可以选择.最明显并且最直接的选项就是启动一个新的 Shell 会话,并且在上面运行命令.另外一个选项,就是在后台运行命令. 一个后台进程就是说一个进程/命令在终端启动后,运行在后台,并且不会和用户发

  • Linux中进程在后台可靠运行的方法总结

    这篇文章主要给大家在讲述了在Linux中让一个进程在后台稳定运行的技巧和方法,总结如下: 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? 解决

随机推荐