在用服务器跑数据的时候经常会遇到数据量大,速度慢的情况,动不动需要用好几天甚至上十天,但电脑总不能好几天不关终端,且保证不断网吧。所以这时候我们就需要将程序放到后台运行,不依赖于终端。关于原理,我们知道当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:一是让进程忽略 HUP 信号,二是让进程运行在新的会话里从而成为不属于此终端的子进程。

目录

nohup

disown

screen

setsid



nohup

  顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号,属于第一种途径。我一般是这样子用:

nohup python -u train_au.py >trian_log 2>&1 &# 注释
# 格式:nohup command args
# > train_log 标准输出重定向到文件中
# 2>&1 标准错误也输出到文件中
# 最后一个 & 表示加到后台

disown

  有时候我们程序跑起来才发现忘了放后台运行,这时候怎么办呢?当然不是看着办,而是有很好的办法解决:

# 通过以下操作即可解决ctrl+z  # 将程序挂起
jobs # 查看作业号
bg job_id  # 放到后台运行
disown -h %job_id

screen

  这种方法是师兄教我的,Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换 。使用screen后其是是 init(PID为1)的子进程,这样也不会受到HUP信号的影响。

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 -S name -> 新建一个叫name的session
screen -dms name ->创建一个detach的session
screen -ls -> 列出当前所有的session
screen -r name -> 回到name这个session
screen -d name -> 远程detach某个session # CTRL-a d快捷键终端当前Session
screen -d -r name -> 结束当前session并回到name这个session

setsid

  属于第二种策略,进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响。

setsid  # set session id
Usage:
setsid [options] <program> [arguments ...]Run a program in a new session.Options:-c, --ctty     set the controlling terminal to the current one-w, --wait     wait program to exit, and use the same return-h, --help     display this help and exit-V, --version  output version information and exitsetsid python train.py

Linux 后台运行程序方法总结相关推荐

  1. 华为怎么关Android,华为手机怎么关闭后台运行程序 华为手机关闭后台运行程序方法...

    初次使用华为手机的朋友注意了,华为手机关闭程序时,容易忘记从后台关闭.这样就会导致手机后台运行程序越来越多,手机使用变得越来越慢.那么怎么操作才能从后台上关闭程序呢? 华为手机关闭后台运行程序方法 这 ...

  2. linux后台运行程序命令screen

    linux后台运行程序命令screen 前言 screen的简单使用 1.创建一个会话窗口 2. 查看我们screen的会话 3. 恢复会话窗口,就是继续查看我们后台运行的程序 前言 我们在服务器终端 ...

  3. Linux 后台运行程序 Screen 服务器

    Linux后台运行python程序,断网||关机后仍能在继续在服务器上运行 常用screen参数: screen -S sess_name -> 新建一个叫sess_name的session s ...

  4. Linux后台运行Jar方法

    在linux服务器上运行Jar文件时通常的方法是: $ java -jar test.jar 这种方式特点是ssh窗口关闭时,程序中止运行.或者是运行时没法切出去执行其他任务,有没有办法让Jar在后台 ...

  5. linux 后台运行程序

    前言 一般为了程序后台运行,我们需要使用nohup命令. 此时需要对程序运行时所产生的输出信息记录,因此就需要使用linux的信息输出命令 START 一个例子 比如要让redis-server程序后 ...

  6. linux 后台运行程序命令

    文章目录 一.cmd & 二.nohup command & 这篇文章记录了两种linux程序后台运行的方式,两种方式略有区别,各位根据需求使用. 一.cmd & 通过 cmd ...

  7. screen tmux 技巧:linux后台运行程序

    通俗简介: screen 简单应用: screen myprogram // 通过screen启动一个程序, 或者screen -L myprogram 加上 -L 是为了 turns on logg ...

  8. golang 程序后台运行的方法 linux windows

    方法1: windows 只需要在编译的时候使用一下go build - ldflags="-H windows" Linux  在运行程序的尾部加入&,或者nohup . ...

  9. linux程序已经在后台运行冻结了_如何使程序在Linux后台运行

    经常在Linux上面运行程序都有这样的体验: 某个程序运行的时候,会产生大量的log(提示)信息,但实际上我们只想让它跑一下而已,log暂时不需要或者后面才有需要. 同时run多个相同或者不同程序的时 ...

最新文章

  1. php趣味小程序,php常用小程序
  2. python 局域网通讯_python3 实现tcp/udp局域网通信
  3. MAC下《暗黑世界》客户端版本编译说明!!
  4. shell脚本实例-判断主机存活 以及企业备份方案
  5. ASP.NET Web API随记汇总
  6. java 循环do while,Javawhile循环与do…while循环 - Java教程
  7. 电脑QQ能登上,网页打不开的解决办法
  8. aix系统下oracle之ora-00471,Oracle RAC 9.2.0.7 (AIX53,HA52)三台主机实例全down的问题
  9. python08--正则
  10. 纯css3特效实现的文字亮光
  11. GIT插件EGIT使用手册
  12. 2021-08-01创建查询关键字及数据类型
  13. Mybatis原理解析(四)--查询流程
  14. 中国移动java项目_Java Web开发-项目部分(中国移动科技综合管理系统)视频——私塾在线提供...
  15. win10启动修复_在win10桌面建立高级启动选项快捷方式,修复电脑故障不用愁
  16. nodejs服务器部署unexpected token{
  17. 数字图像处理复习总结
  18. 华为 OSPF特殊区域
  19. 解读:【阿里热线小蜜】实时语音对话场景下的算法实践
  20. ASCII与Unicode编码消息写文件浅析

热门文章

  1. 容器源码解析之LinkedHashSet(六)
  2. 02.操作系统概述.md
  3. Codeup-问题 A: 最大连续子序列
  4. 软件工程中的所有内聚类型【吐血整理,附带排名!】
  5. 以下关于程序设计语言的叙述中,不正确的是()【最全!最详细解释!!】
  6. 修改Mysql表中自增字段的初始值
  7. 成为进阶Linux大佬的第一步
  8. 2020idea创建web项目_Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
  9. android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...
  10. win7蓝牙怎么连接_台式机蓝牙怎么连接