nohup之no hang up, kill, ps -ef, ps aux, grep

背景:今天在安装hudson时,每次启动时都必须在linux终端(SecureCRT)执行:

java -jar hudson.war --httpPort=18080 --jp13Port=18009

但是执行之后,终端必须一直开着,只要终端一断开,hudson就会中断,心里一思量,Linux应该也有类似windows的服务,可以让其在后台自己运行,故搜索一翻,找到了答案:

http://www.muliba.net/archives/453

使用nohup,这就来找一找到底nohup是用来干嘛的?

紧接着,在网上一顿搜索:

百度文库:http://wenku.baidu.com/link?url=YiRbUMzzDhcEgejL4myRVfUX7Yiqm5JCgyv9tndsUBld9BEq5Ju7kjdVksje0_9XGb_Ib594mwCO0pcOilh-J33LHWGd2ejb7MJsJz2unKW

nohup: 用于不挂断执行程序,这有点类似于新启动一个进程,这才明白了,为什么以前老是使用nohup当做启动一个程序的前缀,在此来细细看看此命令的详解:

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

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

上面的启动hudson的命令可以改成:nohup java -jar hudson.war --httpPort=18080 --jp13Port=18009 &,在终端执行即可让其在后台执行

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

更多:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

将日志输出至指定的日志文件里,更新以上命令至:nohup java -jar hudson.war --httpPort=18080 --jp13Port=18009 > hudson.log &

配合使用fg, bg,将后台、前台进行唤起;

另外一个常用的命令:kill -9 pid

参考资料:http://blog.sina.com.cn/s/blog_975a2a540100ywyx.html,从这个参考资料里学习到了“|”是linux里的管道符:ps -ef | grep java,这个使用是先将ps -ef查找到的内容(所有进程信息)通过管道发送给后面的命令,所有进行信息给到grep java之后,grep java会去找所有进程里包含java关键字的进程并显示出来。ps -ef和ps -aux一样,使用ps -aux | grep java进行尝试。

ps -ef和ps aux有什么区别呢:ps aux 是以BSD方式显示,ps -ef 是以System V方式显示,该种方式比BSD方式显示的多一重要项

ps -ef:UID        PID  PPID  C STIME TTY          TIME CMD

ps aux:USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND

大部分进行解释

UID 用户ID
PID 进程ID
PPID 父进程ID
C CPU占用率
STIME 开始时间
TTY 开始此进程的TTY,终端号
TIME 此进程运行的总时间
CMD 命令名

接下来看看grep命令的使用:

grep全称是Global Regular Expression Print,参考资料:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html

上一篇:从Java访问JMX MBean并执行例程


下一篇:在AWS上安装laravel框架