• 【Linux命令】nohup和&差异,查看进程和终止进程!


    最近在开发dueros的技能,官方提供的PHPSDK中有多个实力,而运行实例的命令如下是

    nohup php -S 0.0.0.0:8029 myindex.php &

    从命令来看,肯定是在8029启动了一个服务,因为之前从来没有用过这个Linux命令,所以对这个命令很好奇。比如,这个命令的标准格式是什么,参数是什么,如何查看这个进程以及如何结束这个进程。后面还有一个&,不知道又是什么功效?

    语法:nohup Command [ Arg … ] [ & ]
    
    用途:不挂断地运行命令。
    
      无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
    
      如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
    
      如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
    
    退出状态:该命令返回下列出口值:   
      126 可以查找但不能调用 Command 参数指定的命令。   
      127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
      否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

    从网络资料可知,nohup命令格式,用法说如如上。   最后的&代表用途是让进程在“后台运行”。 一般情况下nohup和&都是组合使用。

    下面就举个例子。

    1. 用nohup和&创建进程

    nohup php -S 0.0.0.0:8029 myindex.php &
    [1] 5701
    [root@AY140716152350Z ~]# nohup: ignoring input and appending output to `nohup.out'

    执行命令后会返回进程ID:5701,在当前目录创建一个nohup.out文件。

    2. 查看这个进程。

    [root@AY140716152350Z ~]# jobs -l
    [1]+  5701 Running                 nohup php -S 0.0.0.0:8029 myindex.php &

    Jobs -l  jobs命令只看当前终端生效的,关闭终端后,其他终端就无效了

    [root@AY140716152350Z ~]# ps -aux|grep index.php
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      5701  0.0  0.5 195876 10284 pts/0    S    11:34   0:00 php -S 0.0.0.0:8029 myindex.php
    root      5982  0.0  0.0 103188   880 pts/0    S+   11:39   0:00 grep index.php
    [root@AY140716152350Z ~]# ps -aux|grep index.php|grep -v grep
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      5701  0.0  0.5 195876 10284 pts/0    S    11:34   0:00 php -S 0.0.0.0:8029 myindex.php
    

      

    如果你断开终端之后,再次登录,可以使用 ps -aux命

    a:显示所有程序 
    u:以用户为主的格式来显示 
    x:显示所有程序,不以终端机来区分

    通过添加 |grep -v grep 可以排除自身进程。

    3. 结束进程

    [root@AY140716152350Z ~]# kill -9 5701
    

      

    如果需要结束进程,只需用kill命令,参数就是进程号。这个创建的时候可以知道。通过,第二部的命令也可以获取。

    -9 是kill命令的一个参数,可以理解为“强杀”,比起不带参数杀伤力更强。

    4.扩展内容

    使用awk命令获得进程ID

    [root@AY140716152350Z ~]# ps -aux|grep index.php|grep -v grep| awk '{print $2}'
    5701

    print $2 代表取第二个列。从上面ps的结果中可以看到,第二列就是进程ID。

    使用 lsof 查看端口使用情况

    [root@AY140716152350Z ~]# lsof -i:8029
    COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    php     6736 root    4u  IPv4 49611460      0t0  TCP *:8029 (LISTEN)
    

      

    在启动某个服务的时候我们常常会遇到端口被占用的情况,此时,我们非常希望知道是什么命令占用了这个端口,就可以用这个命令。

    好了,这么一圈下来,nohup和&应该大致有个了解了吧。

  • 相关阅读:
    关于bool operator() 几种变种实现的整理
    C# 访问修饰符
    C# 运算符
    c# 集合、存储及排序、迭代
    【并查集】tree
    【最大流】【POJ1149】PIGS
    【拆边最小费用流】【Asia Harbin 2010/2011】【Transportation】
    【DP】【GG选题】
    【DP】【芝麻开门】
    【搜索】【2012 Dhaka Regional】E Poker End Games
  • 原文地址:https://www.cnblogs.com/wangpg/p/10041400.html
Copyright © 2020-2023  润新知