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

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,linux,shell,ubuntu,centos,服务器)