精华内容
下载资源
问答
  • Linux运行程序时,程序进程莫名退出(被杀死)

    千次阅读 热门讨论 2021-01-16 18:03:36
    Linux运行程序时,程序进程莫名退出(被杀死) 1.知识点 1)Linux程序进程被杀,日志突然中止,可以考虑是否因为程序占用内存过高,导致系统内存不足,为避免系统崩溃,系统寻找内存占用最大的进程kill掉 2)也可能...

    Linux运行程序时,程序进程莫名退出(被杀死)

    1.知识点

    1)Linux程序进程被杀,日志突然中止,可以考虑是否因为程序占用内存过高,导致系统内存不足,为避免系统崩溃,系统寻找内存占用最大的进程kill掉

    2)也可能存在运行程序时没有使用nohup ( no hang up) command &将进程提交到后台运行,一旦控制台关闭,任务进程就会停止运行

    3)补充 Ctrl+c ctrl + z 区别

    2.问题排查

    1)排查是否因为程序问题导致系统内存占用过高而被系统主动杀死,通过查看Linux 系统日志的方式查看。

    如果日志中存在 Out of memory: Kill process等关键词则说明进程被系统主动杀死

    # 通过以下三种命令查看系统是否主动杀死程序进程
    dmesg | egrep -i -B100 'killed process'
    
    ## 或:
    egrep -i 'killed process' /var/log/messages
    egrep -i -r 'killed process' /var/log
    
    ## 或:
    journalctl -xb | egrep -i 'killed process'
    

    2)对应没有使用nohup command &的情况

    排查在Linux环境下运行程序时有没有使用nohup command &命令,将进程提交Linux后台中运行,并且在使用nohup命令时,退出服务器终端连接客户端时有没有使用 exit命令正常退出

    # nohup命令的正常使用语法,&将进程提交到后台运行,nohup表示退出账号后进程进行执行,不挂起
    nohup command &
    

    3.解决

    1)对于程序占用系统内存太大,导致系统主动杀死程序进程的情况,应该主动排查程序中代码是否存在迭代,循环或者内存泄露的可能,从代码的角度对程序重构。

    2)对于没有正确使用nohup命令导致的进程异常退出,参考如下命令正确的使用nohup将程序放Linux后台中运行

    ‘nohup’ 表示不挂起, 即正常退出终端连接也不挂起进程。

    ‘command’ 表示要运行的后台进程 例如:sh run.sh

    ‘>’ 表示重定向 表示将 >左边的消息定向输出>右边的某个文件中 例如以下命令将标出输出重定向到out.log文件中

    ‘2>&1’ 是将标准出错重定向到标准输出, 2 >代表标准出错定向 ,&1代表标准输出

    ‘&’ 表示将程序进程提交到后台运行 ,但只使用& 屏幕还是会打印程序相关日志

    # 使用如下命令后台运行程序,out.log为程序日志输出的目录
    nohup command > out.log 2>&1 &
    # 使用 exit 命令 正常退出终端
    exit
    

    4. 补充命令 ctrl + z Ctrl+c

    • ctrl + z
      可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
    • Ctrl+c
      终止前台命令。
    • jobs
      查看当前有多少在后台运行的命令。
      jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
    展开全文
  • linux 后台运行程序

    千次阅读 2021-02-24 15:59:48
    解释:nohup就是不挂起的意思,将pso直接放在后台运行,并把终端输出存放在当前 目录下的pso.log文件中。当客户端关机后重新登陆服务器后,直接查看pso.log文件就可看执行结果(命令:#cat pso.file)。 使程序在...

    1. 在终端输入命令,使程序后台执行:

    nohup ./pso > pso.log 2>&1 &

    解释:nohup就是不挂起的意思,将pso直接放在后台运行,并把终端输出存放在当前

    目录下的pso.log文件中。当客户端关机后重新登陆服务器后,直接查看pso.log文件就可看执行结果(命令:#cat pso.file)。

    使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

    2. 关闭当前后台运行的命令

    ps命令 功能:查看当前的所有进程

    imgimg

    kill命令:结束进程

    ​ (1)通过jobs命令查看jobnum,然后执行 kill jobnum

    ​ (2)通过ps命令查看进程号PID,然后执行 kill PID

    ​ 如果是前台进程的话,直接执行 Ctrl+c 就可以终止了

    ​ ------- 作者:求知之人 来源:CSDN 原文

    3. linux后台运行命令nohup和&的区别

    1. &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C, 那么a.out照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么, a.out进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。

    2. nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./a.out的时候, 关闭shell, 那么a.out进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么, a.out进程也是会消失的(因为对SIGINT信号不免疫)

    3. 所以, &和nohup没有半毛钱的关系, 要让进程真正不受shell中Ctrl C和shell关闭的影响, 那该怎么办呢? 那就用nohua ./a.out &吧, 两全其美。

    来源:https://blog.csdn.net/stpeace/article/details/76389073 https://blog.csdn.net/u011095110/article/details/78666833

    以上就是良许教程网为各位朋友分享的Linux相关知识。

    展开全文
  • 为什么同一个程序同一台计算机上,在Linux下可以运行,而Windows下却不行呢? 反过来,Windows上的程序在Linux上也是一样不能执行的 1编译、链接和装载:拆解程序执行 一个程序执行的过程是什...
    • 本文摘自牛客:https://www.nowcoder.com/discuss/224797?type=post&order=time&pos=&page=0
      为什么同一个程序,在同一台计算机上,在Linux下可以运行,而在Windows下却不行呢?
      反过来,Windows上的程序在Linux上也是一样不能执行的

    1编译、链接和装载:拆解程序执行

    一个程序执行的过程是什么样的?
    如果简单说,就是编译器将代码编译成汇编代码,然后汇编代码再通过汇编器变成机器码,这样cpu就可以执行这些机器码了。
    上面的过程简化了很多,如果详细分析,要分为两个部分:

    • 第一部分编译、汇编、链接的过程,生成一个可执行文件
    • 第二部分通过装载器把可以执行文件装载到内存中,cpu从内存中读取指令和数据,就真正执行了程序。
      在这里插入图片描述

    2 ELF格式和链接

    程序最终是通过装载器变成指令和数据的,所以其实生成的可执行代码也并不仅仅是一条条的指令。

    在Linux下,可执行文件和目标文件所使用的都是一种叫ELF(Execuatable and Linkable File Format)的文件格式,中文名字叫可执行与可链接文件格式
    这里面不仅存放了编译成的汇编指令,还保留了很多别的数据。

    ELF文件格式把各种信息,分成一个一个的Section保存起来。ELF有一个基本的文件头(File Header),用来表示这个文件的基本属性,比如是否是可执行文件,对应的CPU、操作系统等等。除了这些基本属性之外,大部分程序还有这么一些Section:

    • 首先是.text Section,也叫作代码段或者指令段(Code Section),用来保存程序的代码和指令;
    • 接着是.data Section,也叫作数据段(Data Section),用来保存程序里面设置好的初始化数据信息;
    • 然后就是.rel.text Secion,叫作重定位表(Relocation Table)。重定位表里,保留的是当前的文件里面,哪些跳转地址其实是我们不知道的。比如上面的 link_example.o 里面,我们在main函数里面调用了 add 和 printf 这两个函数,但是在链接发生之前,我们并不知道该跳转到哪里,这些信息就会存储在重定位表里;
    • 最后是.symtab Section,叫作符号表(Symbol Table)。符号表保留了我们所说的当前文件里面定义的函数名称和对应地址的地址簿。
      链接器会扫描所有输入的目标文件,然后把所有符号表里的信息收集起来,构成一个全局的符号表。然后再根据重定位表,把所有不确定要跳转地址的代码,根据符号表里面存储的地址,进行一次修正。最后,把所有的目标文件的对应段进行一次合并,变成了最终的可执行代码。这也是为什么,可执行文件里面的函数调用的地址都是正确的

    3 总结

    为什么同样一个程序,在Linux下可以执行而在Windows下不能执行了。其中一个非常重要的原因就是,两个操作系统下可执行文件的格式不一样。

    我们今天讲的是Linux下的ELF文件格式,而Windows的可执行文件格式是一种叫作PE(Portable Executable Format)的文件格式。Linux下的装载器只能解析ELF格式而不能解析PE格式。

    展开全文
  • Linux后台运行程序最实用的两种方式

    千次阅读 多人点赞 2020-12-16 17:16:23
    在Linux后台跑程序什么最好用?拒绝花里胡哨,运维大佬教你最实用的两招!快,快上车~

      Linux如何在后台跑程序?是刚接触Linux的同学都会遇到的问题。大家使用Linux操作系统时,或许都遇到过以下类似场景。

    • 场景1:我用xshell通过 telnet/ssh 远程登录服务器,跑脚本或执行一些耗时较长的任务,有时会因为网络不稳定或手贱等原因断开我的控制终端(如:xshell、sourceCRT)的远程连接状态,导致花费大量时间执行的程序又要重新跑;真难受!

    • 场景2:我需要长时间稳定的跑脚本,希望能在Linux后台跑,关掉xshell也没事,且随时可以回来看输出信息或操作。

      如果你曾被这类问题困扰过,或现在正为此发愁?那么请往下看。本文给大家分享我们在运维工作过程中最常用也最实用的两种后台跑程序方式。记得Mark

    应对手段

      我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程(包括sshd及其子进程)。

    因此,我们的解决办法就有两种途径(对应以下两种方式):

    • 让进程忽略 HUP 信号,
    • 让进程运行在新的会话里从而成为不属于此终端的子进程。

    方式一:nohup 命令 &

      nohup 是我们最常用的办法。顾名思义,nohup 就是让提交的命令忽略 hangup 信号。从而当ssh连接状态断开时,不会被系统中断掉。nohup 在使用上十分方便,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上 & 表示将命令放入后台运行。

    比如我们测试在后台执行 ping www.baidu.com 命令,如下即可:

    nohup ping www.baidu.com &
    

    在这里插入图片描述

    同时,会在输入命令的目录下生成一个nohup.log日志文件(如已有该文件则继续使用)

    当然,也可加上 >filename 2>&1 来自行更改日志输出的目录及文件filename。如下:

    nohup ping www.baidu.com > /home/myout.log 2>&1 &
    

    在这里插入图片描述

    方式二:screen

      我们认为Screen是目前最实用的Linux后台运行工具之一。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端,每个伪终端我们称之为一个session。

      相当于我们可以用xshell打开多个连接(session),不用时可以将这些连接置为离线状态 - Detached离线状态下session中的程序会正常运行,也就是后台运行,并随时可以恢复继续使用,恢复使用时为Attached在线状态,说明有人正在使用。

    1、如何使用screen

    在这里插入图片描述

      上图是screen的session列表,图中Attached代表有其他终端正在使用这个session,Detached说明session处于离线状态,

    下面一起来看一下我们使用Screen时,常用的一些命令:

    screen -S name -> 创建一个名为:name 的session(伪终端)
    
    screen -R name -> 先试图恢复离线的session。若找不到离线的,即建立新的session(伪终端)
    
    screen -ls -> 列出所有已经存在的session
    
    ctrl + a + d -> 退出当前的session
    
    screen -d name -> 将指定的session作业离线。
    
    screen -d -r name -> 离线当前session,恢复并回到name这个session
    
    kill (session进程号) -> 杀掉某个session进程
    

    实际操作流程示例
    1、创建一个名称为“chh”的session。

    # 创建方式一
    screen -S chh
    # 创建方式二
    screen -R chh
    

    2、创建后会自动进入session,进行相关操作。
    在这里插入图片描述

    3、通过ctrl + a + d退出当前session,使其后台(离线)运行
    在这里插入图片描述

    4、screen -ls 查看session列表
    在这里插入图片描述

    5、通过screen -r chhscreen -r 9043(进程号)登录离线session

    6、杀掉“chh”这个session

    kill 9043(进程号)
    

    2、screen 工具需安装

    • 如果你使用yum软件包管理工具:yum install screen
    • 如果你使用APT软件包管理工具:apt-get install screen

    另:手动下载地址:http://ftp.gnu.org/gnu/screen/

    3、screen 后台运行原理

    我们可以通过查看进程树来理解screen是如何不受ssh断开影响的。

    • 这是不用screen的普通运行方式及进程树
    [root@pvcent107 ~]# ping www.baidu.com &
    [1] 9499
    [root@pvcent107 ~]# pstree -H 9499
    init─┬─Xvnc
         ├─acpid
         ├─atd
         ├─2*[sendmail]	
         └─sshd─┬─sshd───sshd───bash───ping
                └─sshd───sshd───bash───pstree
    

      我们可以看出,未使用 screen 时我们所处的 bash 是 sshd 的子进程,当 ssh 断开连接时,HUP 信号自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程),杀掉所有子进程。

    • 再看看使用 screen 运行进程的进程树
    [root@pvcent107 ~]# screen -r chh
    [root@pvcent107 ~]# ping www.baidu.com &
    [1] 9488
    [root@pvcent107 ~]# pstree -H 9488
    init─┬─Xvnc
         ├─acpid
         ├─atd
         ├─screen───bash───ping
         ├─2*[sendmail]
    

      如图可见,bash 是 screen 的子进程,而 screen 是 init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信号自然不会影响到 screen 下面的子进程了。

    附、一张有故事的照片(十三)

    在这里插入图片描述

    最近这个图在我朋友圈刷屏了
    是 LOL 的 s1 界面
    看到时心中五味杂陈
    那时,我还是个意气风发的网瘾少年
    还有梦想
    十年之后

    展开全文
  • secureCRT断掉后想继续运行程序。也就是程序会后台一直执行到结束。 secureCRT通过ssh联接到client端运行程序,如果关掉窗口或者断开连接时,任务会被kill。 为了程序能够后台执行到结束: 1.可以用&: 比如 ...
  • linux运行程序时经常找不到依赖的一些第三方库的.so文件,这个问题怎么解决呢? 对于经常使用的库,应该将其目录加到以下文件里面:/etc/ld.so.conf。 Ubuntu10里,/etc/ld.so.conf的内容是包含/etc/ld.so....
  • linux运行python程序

    2017-11-10 13:25:00
    linux下有多种方式运行python: 1. 命令行执行: 建立一个*.py文档,其中书写python代码。之后,命令行执行: $python *.py 注意事项:1. 需要指明文件的绝对路径;2. 源代码中要指明输出,比如print ...
  • detached,暂时离开正在运行的session,但并不结束会话,其仍后台执行 3.screen -ls screen列表,查看所有存在的会话 4.screen -r session(会话名字 yourname) 恢复被detached的会话 5.screen -X -S your...
  • Linux系统学习笔记:运行程序  前面对Linux系统的使用做了大体上的介绍。从本篇开始,我们进入第二部分:Linux系统中程序是如何运行的。本篇先总体介绍一下相关的内容,接下来会详细展开。 Contents ...
  • linux 系统shell运行程序不退出

    千次阅读 2019-01-29 19:03:00
    如果通过ssh远程连接到linux系统终端,shell下执行程序。假如程序名称为app,且程序本身会一直执行不退出,程序执行需要参数文件paramfile。 当我们用 ./app paramfile 命令运行程序后关闭ssh连接退出...
  • 为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处: 我们这边是否关机不影响日本那边的...
  • Linux应用程序应该存放在什么位置

    万次阅读 2015-09-09 11:19:33
    Linux应用程序通常存放在系统为之保留的特定目录中。系统为正常使用提供的程序,包括用于程序开发的工具,都可在目录/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/...
  • linux应用程序如何运行

    千次阅读 2015-02-16 18:20:30
    当一个应用程序调用execve()执行系统调用时究竟发生...对于Linux而言,唯一的运行一个新程序运行的系统调用是execve(),其原型如下: int execve(const char*filename, char *const argv[], char *const envp[]); 文件
  • linux运行程序指定动态库路径

    万次阅读 2017-03-13 17:38:02
    库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可...
  • 一、为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。...1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那
  • linux运行.net程序

    2020-03-25 09:04:27
    Jexus web server for linux 是一款基于.NET兼容环境,运行Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器。 A,关于安装: cd /tmp sudo rm jexus-5.5* wget ...
  • linux 程序无法运行

    千次阅读 2018-11-30 09:56:26
    提示:error while loading shared libraries: libXXXXX.so.1: cannot open shared object file: No ...相应的库已经存在情况 库路径:“/usr/local/mysql/lib”  export LD_LIBRARY_PATH=/usr/local/mysql/lib:$...
  • Linux定时启动运行程序的方法

    千次阅读 2017-09-14 11:25:07
    cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对...如果当某任务被调度时系统不在运行,该任务就不会被执行。 要使用 cron 服务,你必须安装了 vixie-cron RPM 软件包,而且必须在运行cron服务。...
  • Linux下计算程序运行效率

    千次阅读 2017-07-10 14:34:44
    linux下计算程序运行时间效率,一般有两种方式: 1、使用gettimeofday函数,它主要用来存放当前时间 它的结构为:int gettimeofday(struct timeval *tv,struct timezone *tz); 结构体timeval包含两个...
  • Java程序在Linux中实现后台运行

    千次阅读 2015-08-31 11:56:55
    通过nohup让Java程序在Linux后台运行
  • 将交叉编译生成的可执行文件,放到最小Linux系统中,然后实现板子开机后,最小Linux系统运行起来后,自动执行可执行文件,并将可执行文件进程挂到后台运行。   二、实现 1、生成目标可执行文件 例: Ubuntu...
  • Linux程序运行常用指令

    千次阅读 2019-10-23 11:33:28
    1、后台运行 nohup Command [ Arg … ] [ & ] #CommServer为程序名,/debug为参数 nohup ./CommServer /debug & 2、杀死进程 //发送信号让进程停止并退出 kill pid //强制杀死,不建议使用 kill ...
  • linux /hadoop 运行java 程序

    千次阅读 2017-07-19 17:34:49
    linux / hadoop 运行... java 命令运行程序 javac Hello.java java Hello 多个java文件 javac编译生成.class文件 jar命令生成jar包 java命令运行程序 cd classes //首先进入根目录,否则打包会有问题 to
  • Linux退出服务器情况下继续运行程序

    千次阅读 2020-03-30 19:46:10
    今天用ssh创建了 借助screen解决 项目地址 ...文档地址 ...安装 apt-get install screen 使用 输入screen然后按空格键或者回车后进入Screen会话,就可以运行用户所需要的程序了。 (2)...
  • 有的时候我们需要长时间地运行background programs,而且不希望程序退出,今天我们要来看一下如何在linux环境下来实现这个目的。我的演示环境是Ubuntu 16.04 LTS。首先第一种办法,使用系统命令:$ nohup command > ...
  • linux运行C程序

    千次阅读 2015-09-03 20:47:39
    1.2 GCC是Linux下使用最广泛的C/C++编译器是,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。 步骤1.1 编写 使用Gedit编写一个简单的C语言程序 1.2 编译 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592,020
精华内容 236,808
关键字:

linux运行程序存在哪里

linux 订阅