热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux进程后台运行的几种方式

如果需要执行一个耗时比较久的任务,尤其是要ssh到远程服务器上执行,如果直接在shell里启动的话,此时该shell肯定不能关闭,本机和远程服务器之间的网络也要一直连通,否则该程序


如果需要执行一个耗时比较久的任务,尤其是要ssh到远程服务器上执行,如果直接在shell里启动的话,此时该shell肯定不能关闭,本机和远程服务器之间的网络也要一直连通,否则该程序就会退出。


此时的做法通常会选择在后台运行程序,这里介绍几种常见的后台运行方式。


以守护进程方式启动


# ps -e | grep httpd
# service httpd start
正在启动 httpd: [确定]
# ps -e | grep httpd
30413 ? 00:00:00 httpd
30421 ? 00:00:00 httpd
30422 ? 00:00:00 httpd
30423 ? 00:00:00 httpd
30424 ? 00:00:00 httpd
30425 ? 00:00:00 httpd
30426 ? 00:00:00 httpd
30427 ? 00:00:00 httpd
30428 ? 00:00:00 httpd

以这种方式启动的通过是一些做的比较成熟的服务,比如Apache Httpd、Mysqld等等。


程序本身带有后台运行模式


比如redis server服务,默认直接启动时是以前台模式运行的:


# redis-server
30914:C 14 Sep 10:07:39.470 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.3 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 30914
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
30914:M 14 Sep 10:07:39.471 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
30914:M 14 Sep 10:07:39.471 # Server started, Redis version 3.2.3


而如果在redis-server启动时带上一个配置文件,且配置文件中设置 daemonize yes
,那么再启动时就会变成后台服务的方式:


# redis-server /etc/redis.conf
# ps -ef | grep redis
root 31147 1 0 10:09 ? 00:00:00 redis-server 0.0.0.0:6379

有的程序是通过配置文件决定,有的是通过运行参数决定是否以后台模式启动,比如:


# ./unimrcpserver -d
#$#[Current Version Build at:Sep 12 2016 13:07:22]#$#
2016-09-14 10:15:10:252825 [NOTICE] Run as Daemon
# ps -ef | grep mrcp
root 8658 1 0 10:15 ? 00:00:00 ./unimrcpserver -d

以上两种方式都是本身可以直接后台运行的,接下来介绍的nohup和screen方式都是程序本身没有后台运行模式,比如一些第三方程序、脚本或者我们自己随手写的小工具之类的。


Ctrl+z/bg


对于正在运行的、以前台方式启动的程序,我们可以通过以下方式将其转到后台运行:


# ctrl + z # 在该程序所在shell上指向ctrl+z,相当于把该程序暂停
# jobs # 查看所有的后台运行的程序
# bg %1 # 将标号1的程序转为后台运行(也可能是标号2、3、4...)
# %1 # 放回前台运行

注意: 在将进程方到后台执行后,其父进程还是当前终端shell的进程,而一旦父进程退出(shell关闭),则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略sighup信号,或者setsid将将父进程设为init进程(像tomcat就是忽略sighup)。


通过nohup方式启动


nohup ./a.out &

以上命令就运行了一些后台程序(a.out), 注意此时可能会在当前目录产生一个nohup.out文件,且该文件有可能很大,直接删掉该文件即可。


或者将所有输出dump到/dev/null下:


nohup ./elasticsearch > /dev/null 2>log &
rm -rf nohup.out

通过screen命令进行启动


screen -ls # 列出所有screen窗口
screen -S firsts # 创建名字为firsts的screen窗口并执行某些命令
Ctrl + a, d # 退出当前screen,但保持screen在后台运行
Ctrl + a, c # 在同一screen下创建一个新的窗口
Ctrl + a, [num] # 按相应数字就切到相应的数字对应的窗口
Ctrl + a, n # 切换到下一个窗口
Ctrl+a," # 列出所有的screen窗口,然后通过上下键选择,这样对于screen窗口数较多时非常实用
screen -r firsts # 打开刚刚创建的screen(名字叫firsts)
screen -dmS seconds ./a.out # 创建一个后台运行的screen,名字叫seconds, 运行的命令是a.out(启动一个Activate的Screen但不Attach,同时执行命令)

对于一些程序本身不能直接后台运行的程序,可以通过screen进行运行,这样我们就可以和远程服务器断开链接,等过一段时间后再ssh到远程,并通过screen查看程序的运行状态,这种做法比nohup有一个好处就是可以随时看到屏幕输出。




推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
author-avatar
doudou888公馆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有