开发调试linux服务时几个好用的进程和端口查询命令组合和简单脚本(ps netstat awk grep)

这几天在搭建flume服务并在其框架下开发,反复调试输入命令让人不厌其烦,因此在这里记录一下自己找到的一些小技巧:

首先,把自己的应用程序做成一个service是一个很好的选择,一个service就需要支持start 和 stop,start能启动程序,stop能找到start所启动的程序的进程并且关掉它。

可以直接根据/etc/init.d/下的服务脚本来改,但我遇到了问题:因为那些系统服务脚本都是基于start-stop-daemon命令,这个命令很强大,可以启动一个可执行文件并且把进程PID,写入指定的文件里,这样在停止进程时可以直接读取文件来关掉进程。

但我用这个命令来启动自己的程序时,程序启动成功,但是PID文件在无任何错误信息的情况下就是没法生成,测试了root权限执行,也测试了各种写入路径(不需要高权限的),统统不行,于是决定慢慢研究这个问题的同时,先用简单的方法去解决我的需求。

启动程序很简单,作为服务,需要后台运行,假设你的可执行文件名叫做PROGRAM。

所以启动就需要  :

nohup PROGRAM [args] &

要关闭就需要    :

#PROGRAM是进程名

PID = `pidof PROGRAM`

if [ ! -z "$PID" ]; then
     kill -15 $PID
     fi

但是对于java或者python 程序,进程是java或者python,没有可区分度,所以不能用"pidof"命令,那么只能用"ps -ef"命令,用grep对进程信息进行过滤,来找到合适的进程

而一台机器上可以有多个flume服务,每个服务可能就执行参数有一些区别,所以要用多个grep:

  PID=`ps -ef | grep java | grep flume | awk '{ print $2 }'`
     if [ ! -z "$PID" ]; then
     kill -15 $PID
     fi

这里用到了awk命令,取出了"ps"命令打印信息的第二列PID的值。

这样一个简单服务的start和stop就完成了。

我还遇到另一个需求,就是检查某端口的占用情况,并且强制关闭占用这个端口的进程:

# netstat -tlnpa | grep 44444
tcp6       0      0 10.58.242.18:44444      :::*                    LISTEN      25049/java

端口查询结果有如上格式,那么我们可以根据这个格式编写如下脚本:

pinfo=`netstat -tlnpa | grep 44444`

PID=`awk '{split("'$pinfo'", array, "/");print array[2]}' `

if [ ! -z "$PID" ]; then
     kill -15 $PID
     fi

就搞定了。

深入挖掘awk 和 grep 还可以有很多用处,作为shell文本处理的利器,我这里只是日常简单的应用,希望对大家有帮助。

时间: 2024-11-10 01:31:15

开发调试linux服务时几个好用的进程和端口查询命令组合和简单脚本(ps netstat awk grep)的相关文章

使用VS+VisualGDB编译调试Linux程序

Linux程序开发变得越来越多,越来越多的程序.产品需要跨平台,甚至有些开源项目只支持Linux平台,所以掌握Linux开发变得越来越重要. 但是对于习惯了Windows下的开发,使用了VS这个宇宙第一IDE后,觉得Linux下的纯命令行开发调试,还是有些不习惯,效率有些低(大神除外).那么能不能用VS来开发调试Linux程序呢,经过各种查找,找到了VisualGDB这个神奇的插件,通过VS+VisualGDB就可以编译调试Linux程序. 下面我们来看一下创建demo的过程吧. 配置虚拟机 V

linux服务自动手动启动tomcat的方式

Linux服务自启动的方式有多种,有时候无法通过chkconfig命令运行级别设置和ntsysv图形运行级别设置时,此下方法可以有效解决问题. 生产环境: OS: CentOS release 6.7 (Final) Web服务器:Apache Tomcat/7.0.57 任务:Linux启动时需要自动启动Tomcat服务. Linux自动启动服务配置方式如下: [[email protected] ~]# [[email protected]~]# cd  /etc/rc.d [[email 

VELT-0.1.5开发:使用kgdb调试Linux内核

VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights

VELT-0.1.5开发:在vs2013下调试Linux GUI程序

VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights

Linux c c++ 开发调试技巧

看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Documentation, Inc. (SDI) 讨论几种可以帮助 C++ 开发人员节省时间的技巧和免费工具. C++ 开发人员在日常工作中通常要完成多个任务:开发新软件.调试其他人的代码.制订测试计划.为每个计划开发测试.管理衰退软件(regression suite)等等.在多种角色之间频繁转换会消

windows程序员C/C++转向linux程序员时,如何编写、调试linux程序

windows程序员使用vs或windbg进行调试相当熟悉,转到linux下面,要进行程序的编写.调试,往往非常痛苦(或者说不习惯吧).目前可以找到的各种IDE或编辑软件相当多,我试过的有eclipse+cdt+gdb,codeblock+gdb,vi+cgdb,都是不太理想,时不时的想往vs上靠,一直还是有vs的情结. 某日,正在查找gdb如何显示当前进程加载的动态库时,查到了visualgdb中关于gdb的教程,此时猛然想起了visualgdb这个工具(原来在用visualddk的时候瞧见过

nodejs开发调试时,使用supervisor

如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效.这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置).Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而

【转】TI-Davinci开发系列之六CCS5.2调试Linux内核

上转博文<TI-Davinci开发系列之五CCS5.2使用gdbserver远程调试应用程序> 使用CCS5.2远程调试内核时,只需导入Linux内核源码,而不需要编译内核,也就不会用到交叉编译链,同时不需要使用gdbserver,但需要仿真器XDS560V2,所以Windows和Linux都可以完成,但考虑到Windows CCS5.2软件成熟,bug较少,且Windows易于操作,故本文推荐并主要介绍Windows版CCS5.2调试内核的方法.在介绍远程调试Linux之前,务必保证仿真器X

linux -- 启动时启动服务或者执行命令

运行等级 首先,我们需要知道Linux系统关于运行等级的知识.在不同的linux系统上(例如ubuntu和Fedora)这些数字与和所代表的意义可能不同,但主要的有以下几个: 单用户模式. 多用户模式. 网络多用户模式. 用于特殊目的的预留 添加显示管理器到等级3 因此,对于普通的运行等级,服务使用等级3,这时不管X11是否启动,服务将自动启动. 服务,守护进程,服务器 在Ubuntu中,可以使用sys-rc-conf命令简单的选择需要启动的已安装服务. 在Fedora下,可以使用chkconf