首页 > 系统相关 >Linux下面让程序保持后台运行

Linux下面让程序保持后台运行

时间:2023-05-05 17:34:39浏览次数:40  
标签:pts 程序 dev 命令 64 nohup Linux 后台 root

我们远程登录linux服务器,希望退出终端后,启动的命令仍然在后台运行。

首先要说明的是,让程序以daemon方式运行,应该要求更复杂一点,参见 https://en.wikipedia.org/wiki/Daemon_(computing)。

我们的简单要求,希望退出终端后命令仍然运行,实际上是希望消除终端退出对命令进程的影响。就我所知,这主要是消除SIGHUP信号和终端设备失效对启动的命令进程的影响。第二个影响主要是终端启动命令后,命令的标准输出和标准错误都是打开为终端设备,比如/dev/pts/1(标准也是如此),比如:

# ll /proc/3443/fd
总用量 0
lrwx------ 1 root root 64 5月   5 17:07 0 -> /dev/pts/1
lrwx------ 1 root root 64 5月   5 17:07 1 -> /dev/pts/1
lrwx------ 1 root root 64 5月   5 17:07 2 -> /dev/pts/1

1. 消除SIGHUP的影响

   使用nohup命令或者将要启动的命令放到一个脚本中,然后给脚本执行权限后,执行脚本。如果没有指定重定向的,nohup也会将标准输出和标准错误重定向到nohup.out文件。

2. 消除设备失效的影响

  当所用终端退出后,设备比如/dev/pts/1就会失效,会变成如下所示状态:

# ll /proc/3443/fd
总用量 0
lrwx------ 1 root root 64 5月   5 17:07 0 -> /dev/pts/1 (deleted)
lrwx------ 1 root root 64 5月   5 17:07 1 -> /dev/pts/1 (deleted)
lrwx------ 1 root root 64 5月   5 17:07 2 -> /dev/pts/1 (deleted)
此时进程还不会退出,直到进程真正通过这些文件描述进行io的时候,才会出错退出——所以如果进程确实没有任何输入输出,那么不做重定向在终端退出后也可以后台长时间运行。

如何消除呢?主要通过重定向将相关文件描述符和终端设备脱离。 & 表示后台运行,刚好就会将 标准输入,即0重定向到/dev/null,nohup刚才也说了也会执行重定向;如果是在脚本中启动命令就需要自己进行重定向。

 

总结:

使用下面命令形式基本可以保证命令在后台运行,不会因为终端退出而终止。

1. 终端启动命令
  nohup cmd &
  nohup cmd 1>file1 2>fil2 &
  nohup cmd &>file &

2. 脚本中启动命令
  cmd 1>file1 2>fil2 &
  cmd &>file &

标签:pts,程序,dev,命令,64,nohup,Linux,后台,root
From: https://www.cnblogs.com/csmountains/p/17374835.html

相关文章

  • linux 安装二进制mysql
    https://www.mysql.com/https://dev.mysql.com/downloads/社区版本https://downloads.mysql.com/archives/community/下载linux-genericproductversion5.7.20operatingsystemlinux-GenericosVersionLinux-Generic(glibc2.12)(x86,64-bit)CompressedTARArchi......
  • 微信小程序-根据同声传译插件创建语音转文字的自定义插件
    使用了vantweapp组件.js//page/common/components/voice/voice.jsimportToastfrom'../../../../vant-weapp/dist/toast/toast';//引入插件:微信同声传译varplugin=requirePlugin("WechatVoice");//获取全局唯一的语音识别管理器recordRecoManagerletmanager=pl......
  • Azure DevOps(三)Azure Pipeline 自动化将程序包上传到 Azure Bolb Storage
    一,引言结合前几篇文章,我们了解到AzurePipeline完美的解决了持续集成,自动编译。同时也兼顾了Sonarqube作为代码扫描工具。接下来另外一个问题出现了,AzureDevOps由于有人员限制,项目上不能给非开发人员或者外包成员开权限,这个时候就需要将编译好的程序包上传到公共网盘或......
  • nrm : 无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称
    一、前言因为觉得npm下载太慢了,可能是镜像不行,需要不断的更换,我嫌找镜像太麻烦了,然后看到网上说使用第三方软件可以快速的修改、切换镜像源于是下载了nrm执行npmi-gnrm进行全局的下载下载完成后,执行命令nrmls报错了二、解决1、执行命令npmlist--depath=0-g查看是否......
  • linux 账户和权限
    目录一、用户账户管理二、组账号管理三、用户账户文件和组账户文件四、查询账户命令五、设置目录与文件权限六、设置命令与文件归属七、默认文件属性umask八、修改主机名         一、用户账户管理useradd:添加用户默认创建用户含有u......
  • 微信小程序获取头像、昵称的处理方法
    一、现象根据《小程序用户头像昵称获取规则调整公告》自2022年10月25日24时后(以下统称“生效期”),用户头像昵称获取规则将进行调整 :通过wx.getUserInfo接口获取用户头像将统一返回默认灰色头像,昵称将统一返回“微信用户”官方链接:https://developers.weixin.qq......
  • 代码大全-如何建立一个高质量的子程序
    不积硅步,无以至千里;不积小流,无以成江海。大型的项目是由一个个小模块构建而成。每一个小模块里面又包含着许多子程序。如果每一个子程序都能做到高质量,那么整个项目代码的质量必然很高。......
  • 软考程序员-C专题(2)
    目录1.2019上半年真题2.2018下半年真题3.2018上半年真题 ......
  • Linux 日志 | 常用系统日志
    为了保证Linux系统正常运行,遇到问题时能及时解决,高效分析系统日志是非常必要的。Linux系统中的日志驱动进程通常为syslog,系统日志都可在syslog配置文件中配置。我们可以通过调用syslog的接口进行log,syslogd在取到log后进行处理,根据配置,将log保存到本地或发送到其......
  • Android 程序活动单元Activity
    点击按钮页面跳转在xxxActivity类,创建按钮对象对按钮对象创建匿名内部类监听器记得选View.OnClickListener()在内部类建立Intent跳转对象:newIntent(原界面,目标界面)Intentintent=newIntent(LoginActivity.this,MainActivity.class);使用startActivity启动跳转......