linux命令进程异常 linux进程异常退出分析

Linux下怎样检测进程是否异常#includesys/io.h
#includesys/ipc.h
#includesys/timeb.h
#includesys/shm.h
#includesys/sem.h
#includesys/sysinfo.h
#include stdio.h
#include string.h
#include sys/ioctl.h
#include sys/time.h
#includefcntl.h
#includeunistd.h
#includestdlib.h
#includeerrno.h
#includetime.h
#includesys/ipc.h
#includesys/types.h
#includesys/stat.h
#includesys/msg.h
void CheckPid(void)
{
pid_t termpid;
int flags;
termpid = waitpid(-1,flags,WNOHANG);
if (termpid0)
{
msglog.code = LOG_MSG_OTHER;
if(WIFEXITED(flags))
{
printf("pid=%d的子进程正常结束,返回信息=%d,结束状态=%d\n",termpid,flags,WEXITSTATUS(flags));
}
else if(WIFSIGNALED(flags))
{
printf("pid=%d的子进程异常终止,返回信息=%d,终止进程的信号的编号=%d\n",termpid,flags,WTERMSIG(flags));
}
else if(WIFSTOPPED(flags))
{
printf("pid=%d的子进程暂停,返回信息=%d,暂停进程的信号的编号=%d\n",termpid,flags,WSTOPSIG(flags));
}
else
{
printf_d(cur_dep,SYS_PID_DSC_OUTTYPE,"pid=%d的子进程退出",termpid);
}
}
}
其中“返回信息”flags的返回值有几种情况,如段错误、正常终止、 被信号终断等
Linux C程序异常退出怎么办在Linux上只要打开core dump文件开关linux命令进程异常,当程序crash时系统生成相应linux命令进程异常的core文件 。下面是简单的一些步骤: 1.查看当前是否已经打开linux命令进程异常了此开关 通过命令:ulimit -c 如果输出为 0 linux命令进程异常 , 则代表没有打开 。如果为unlimited则已经打开linux命令进程异常了,就没必要在做打开 。2.
在linux下,进程非正常退出时,怎样释放掉已经生成的资源一般linux使用kill来结束进程
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令 。通常,终止一个前台进程可以使用Ctrl C键,但是,对于一个后台进程就须用kill命令来终止 , 我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程 。kill命令是通过向进程发送指定的信号来结束相应进程的 。在默认情况下,采用编号为15的TERM信号 。TERM信号将终止所有不能捕获该信号的进程 。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程 。
1.命令格式:
kill[参数][进程号]
2.命令功能:
发送指定的信号到相应进程 。不指定型号将发送SIGTERM(15)终止指定进程 。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9),将强制结束进程 , 使用ps命令或者jobs 命令可以查看进程号 。root用户将影响用户的进程,非root用户只能影响自己的进程 。
3.命令参数:
-l信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a当处理当前进程时 , 不限制命令名和进程号的对应关系
-p指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s指定发送信号
-u指定用户
注意:
1、kill命令可以带信号号码选项,也可以不带 。如果没有信号号码,kill命令就会发出终止信号(15) , 这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源 。也可以用kill向进程发送特定的信号 。例如:
kill -2 123
它的效果等同于在前台运行PID为123的进程时按下Ctrl C键 。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号 。
2、kill可以带有进程ID号作为参数 。当用kill向这些进程发送信号时,必须是这些进程的主人 。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程 , 就会得到一个错误信息 。
3、可以向多个进程发信号或终止它们 。
4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息 。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时 , 才会显示出来 。
5、应注意,信号使进程强行终止 , 这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态 。发送信号时必须小心,只有在万不得已时 , 才用kill信号(9),因为进程不能首先捕获它 。要撤销所有的后台作业,可以输入kill 0 。因为有些在后台运行的命令会启动多个进程 , 跟踪并找到所有要杀掉的进程的PID是件很麻烦的事 。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法 。
Linux进程详解ps是Linux 中最基础的浏览系统中的进程的命令 。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等 。接下来解读一下Linux操作系统的进程和Windows「Ctrl Alt delete」直接的差异 。
在进行了解进程命令之前需要知道进程的一些状态
ps工具标识进程的5种状态码:
Linux操作系统进程执行的状态转换图如图所示:
下面来看一下 ps命令
ps --help命令可以查看ps命令的使用说明
或者使用 man ps命令 查询ps的详细说明
在 man手册 关于ps的解读中,总结了一下几个参数的含义:
以上的参数是可以拼接使用的 , 那就了解一些常用的参数组合
ps aux命令
ps -ef命令
查看进程状态这两个是命令是最常用的,使用 ps aux 可以查看进程的详细运行状态等 。使用 ps -ef不仅可以显示自身的PID,也可以显示PPID(父进程) 。但是显示不了进程的运行状态
top命令
top命令是Linux下常用的性能分析工具 , 能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
man手册关于top的解释
关闭进程,重启进程
在上一片文章中 linux的目录结构 里面说过,在目录/etc/init.d/目录下包含许多系统各种服务的启动和停止脚本 。假设进程占用内存较大或者进程异常 , 我们是重启这个进程restart 。如下图所示:
我们重启了mysqld这个进程,可以看出进程号已经改变(从15743到15964) , 说明进程已经重启 。
Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2)
我们来看一下进程状态[下面是删减版,进程数量太多 , 列举一部分]
可以看到很多进程的PPID号是1和2 。也就是init进程和kthreadd进程 。
在使用Windows系统的过程中,都碰到过应用程序卡死的情况 。应对此问题,我们一般都是等待失去响应的程序恢复,或者是直接使用任务管理器将其强制关闭,然后再重新打开 。
在Linux中,遇到特别耗费资源的进程,当然需要使用 top命令 查看进程占用率高的进程 。或者使用 free -m命令 查看内存剩余 。假设需要强杀进程来释放空间 。我们涉及到Linux中信号??的知识,在这里简单的描述一下,信号的详解会在接下来的文章里面叙述 。
free -m命令查看内存空间
在linux中存在着64种信号
使用 kill -l命令 查看信号列表
在前面说过进程会被这些个信号(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号强制停止运行) 那问题就在于如何发信号给这些个进程 。
使用kill命令发信号
我们从上面可以看到 mysqld进程被重启了。
关于Linux的这一块进程的知识还有很多,后面的文章跟大家分享僵尸进程 , 孤儿进程等等知识,以及守护进程(daemon进程).
Linux centos 6.5 异常进程与木马查杀都说Linux主机是非常安全的 , 但有时却不见得,第二次碰上Linux中木马了(我运气这么好?) 。
废话不多说,直接进入主题 。
一、状况描述:
1、2017.06.19早上过来发现ssh连接不上,以及各个官网都访问不了;
2、通过云主机厂商后台登录,发现nginx、tomcat、svn应用全部停止;
3、ping(云主机在US) 不通;
二、问题定位:
应该是云主机被重启了,同时断开了外网(有些应用没有设置为自启动),于是重启公网的网卡后,ssh就可以登录了,手工启动了nginx、
omcat、svn等应用,因为上次也发生过几次这样的情况,据云厂商反馈 , 云主机对外发送大量的网络包,导致流量巨大,具体在Linux主机上的
体现就是cpu一直100%左右撑死 , 于是我怀疑是不是这次也是对外发送巨大的流量包,导致云主机厂商断了主机的外网呢?通过top命令查看
进程发现并没有cpu占用过高的进程 , 就ifconfig 查看了下网卡情况,显示网卡流量在2.4G左右(由于是事后了,没有截到先前的图),感觉很迅
速,于是我就又断开了一次,就没管了,到中午午休后 , 下午再次使用ifconfig,此时流量对外发送大量的流量包,累计流量竟然高达140G左右
(后面处理了 , 就累加了一点):
这情况显示,肯定是中木马,由于Linux主机上面没有安装一些关于流量分析的软件 , 只从常用的top命令开始,发现并没有cpu占用很高的进程,
但发现有两个从来没见过的进程:MuYuHang 、LTF,通过 /proc/进程id 进入对应进程文件 , ls -lh,发现可执行文件竟然指向了Tomcat bin目录
跟上次又是多么的相似,只是进程和文件名不一样罢了 , 于是简单的操作,kill -9 pid,结果操作无效,很快进程起来,而且文件删除不了,报
operation not permitted(我可是用root用户执行的,难道还有root干不了的事情?具体了解可查看资料 lsattr和),删除后 , 过一会儿又自动恢
复 。
三、ClamAV工具
关于ClamAV工具的用途以及安装,请百度搜索相关介绍和安装资料,大概说一下 , ClamAV是Linux平台的一个木马扫描工具,可以扫描哪些
文件被感染了(但不能自动清除这些病毒,没有windows上面的杀毒软件那么强大),我安装在/home/clamav目录下 。
四、解决办法
通过命令 /home/clamav/bin/clamscan -r --bell -i /,扫描这个根目录发现有不少的文件被感染了:
发现tomcat bin目录下的2个文件果然是被感染的了 , 同时发现有几个命令也被感染了如ps、netstat以及lsof,于是我清除了bsd-port这个目
录,同时把pythno清理,对于命令可以通过 , 从同版本的linux 没有问题的linux主机上面copy过来,删除后进行覆盖即可(也可以删除重装),
再把tomcat的文件删除,以及异常的进程kill掉 , 再用clamav扫描发现没有了,最后还需要检查下/etc/init.d这个开机启动的文件,检查里面自动启
动的,我这个里面就发现先前指向 /user/bin/bsd-port/knerl 这个,文件已经删除了,我同时把对应的sh,注释掉 。目前来看,一切正常了 。。。
五、总结
一次比较完整的定位问题,平时一般很少接触到查收木马的事情 , 碰上了就当学习,提升技能,只是不足,没有搞清木马是如何进来的 , 这
个需要后续不断的学习 。心好累,Linux主机第二次中木马了 。。。。
【linux命令进程异常 linux进程异常退出分析】linux命令进程异常的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux进程异常退出分析、linux命令进程异常的信息别忘了在本站进行查找喔 。

    推荐阅读