• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)

让java程序在后台一直执行(例如putty关闭后后台程序继续运行)

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了putty,putty中文版,putty下载,putty使用教程,putty是什么等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

让java程序在后台一直执行(例如putty关闭后后台程序继续运行)


在linux系统下如何使一个程序在后台一直执行呢?很多人使用&结尾的命令形式,但是如果没有守护进程的话,即使这样,在终端关闭时程序也会终止运行。这时候就得使用nohup命令了。

例如,如果在终端中执行Java-jar xxx.jar&命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar&命令,则程序会在后台一直运行,值得注意的是,此时程序控制台输出会被转移到nohup.out文件中。

附:nohup命令参考 nohup 命令  

用途:不挂断地运行命令。   

语法:nohup Command [ Arg ... ] [ & ]   

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。   

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

如需要了解窗口关闭导致运行进程关闭的原因:请参看下面的具体分析


你是不是经常需要远程登录到Linux服务器?你是不是经常为一些长时间运行的任务头疼?还在用nohup吗?那么来看看screen吧,它会给你一个惊喜! 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

【原因所在】

元凶:SIGHUP 信号 让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。 在Linux/Unix中,有这样几个概念:

  • 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
  • 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  • 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

根据POSIX.1定义: 挂断信号(SIGHUP)默认的动作是终止程序。 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。 如果会话期首进程终止,则该信号发送到该会话期前台进程组。

一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。 因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。 我们来看一个例子。打开两个SSH终端窗口,在其中一个运行top命令。 在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。 使用pstree命令可以更清楚地看到这个关系: 使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。 关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。

(其实,对于windows控制台程序,也是类似的。在一个控制台窗口中运行一个非service程序,那么控制台窗口自然是该窗口中运行程序的父进程,当父进程关闭时,默认由其创建的子进程会被kill掉。当然,应该也有机制创建类似unix的后台进程。。。)

【基础回避方法】 如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。

【高级回避方法】

虽然nohup很容易使用,但还是比较"简陋"的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。 其实我们可以使用一个更为强大的实用程序screen。流行的Linux发行版(例如Red Hat Enterprise Linux 4)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

开始使用Screen
简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式:
1.直接在命令行键入screen命令
Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。
2.Screen命令后跟你要执行的程序。
Screen创建一个执行vi
test.c的单窗口会话,退出vi将退出该窗口/会话。
3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a
c,即Ctrl键+a键,之后再按下c键,screen
在该会话内生成一个新的窗口并切换到该窗口。
screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)scree

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • xshell可以ping通但是不能远程服务器,putty可以远程
  • 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)

相关文章

  • 2017-05-26Android5 Zygote 与 SystemServer 启动流程分析
  • 2017-05-26Android V7包学习笔记更新中.....
  • 2017-05-26【lushengduan】02、Activity的基本认识 如何弹出一条Toast提示框,lushengduantoast
  • 2017-05-26Android 面试题总结(二)
  • 2017-05-26GCM(Google Cloud Messaging)推送完全解析,gcmmessaging
  • 2017-05-26Android事件分发
  • 2017-05-26Kotlin怎样使用Android的Dagger2,kotlindagger2
  • 2017-05-26Android MotionEvent详解
  • 2017-05-26android内核剖析,android内核
  • 2017-05-26cocos的Director、Scence、Layer(一)---摘自于官方文档,cocosscence

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓第四天笔记-Sqlite,安卓第四天-sqlite
    • 违章查询源码分享,违章查询源码
    • android入门,看这一本书就够了,android入门,
    • android-studio的gradle plugin配置相关的一些记录,androidstudiogradle
    • 从编程的角度理解gradle脚本??Android Studio脚本构建和编程
    • Android系统服务(一)解析ActivityManagerService(AMS)
    • GCM(Google Cloud Messaging)推送完全解析,gcmmessaging
    • Android 大杂烩工程之ListView的开发2以及数据仓库开发模式
    • Android之Activity系列总结(一)--Activity概览,android--activity
    • 安卓高级组件-----自动编辑文本框,安卓-----文本框

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有