• Linux Shell的 & 、&& 、 ||


    Linux Shell的 & 、&& 、 ||
     
    • 发表于 3年前
    •  
    • 阅读 18472
    •  
    • 收藏 20
    •  
    • 点赞 4
    •  
    • 评论 0

    & 放在启动参数后面表示设置此进程为后台进程

    默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。

    如:

    tianfang > run &
        [1] 11319
    tianfang >

    进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为[1] 11319例:[1]表示job ID是1,11319表示进程ID是11319。切换到后台的进程,仍然可以用ps命令查看。

    前后台间切换

    可以通过bg <jobid>(background)和fg<jobid>(foreground)命令将其在前后台间状态切换。

    守护进程

    如果一个进程永远都是以后台方式启动,并且不能受到Shell退出影响而退出,一个正统的做法是将其创建为守护进程。守护进程值得是系统长期运行的后台进程,类似Windows服务。守护进程信息通过ps –a无法查看到,需要用到–x参数,当使用这条命令的时候,往往还附上-j参数以查看作业控制信息,其中TPGID一栏为-1就是守护进程。

        tianfang > ps xj
         PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
         953 1190 1190 1190 ? -1 Ss 1000 0:00 /bin/sh /usr/bin/startkde
         1 1490 1482 1482 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient –seamless
         1 1491 1477 1477 ? -1 Sl 1000 0:00 /usr/bin/VBoxClient –display

    创建守护进程最关键的一步是调用setsid函数创建一个新的Session,并成为Session Leader。成功调用该函数的结果是:

    • 创建一个新的Session,当前进程成为Session Leader,当前进程的id就是Session的id
    • 创建一个新的进程组,当前进程成为进程组的Leader,当前进程的id就是进程组的id
    • 如果当前进程原本有一个控制终端,则它失去这个控制终端,成为一个没有控制终端的进程。
    更多请参考:http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html 

    && 

    shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

    有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

    语法格式如下:

    command1 && command2 [&& command3 ...] 

    1 命令之间使用 && 连接,实现 逻辑与的功能。 
    2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 
    3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。 --短路的功能

    command1 || command2 [|| command3 ...] 

    1 命令之间使用 || 连接,实现 逻辑或的功能。 
    2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。 
    3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。 --直到返回真的地方停止执行。

    --------------------------------------------------------------------------------------------------

    相关推荐:

    Java中&与&&的区别

    java中,&连接两个数字的时候,它是表示两个位的按位与;而&&表示两个条件的逻辑与运算,兼有短路的功能。但是 & 如果连接2个条件是,都会执行。

    --》要点:先说最明显的不同点,再说相同点。

  • 相关阅读:
    SpringCloud(2) 服务注册和发现Eureka Server
    决策树
    python基础6--面向对象基础、装饰器
    python基础5--输入输出、错误与异常
    python基础4--控制流
    python基础3--函数
    python基础2--数据结构(列表List、元组Tuple、字典Dict)
    python基础1--安装、package、数据类型
    Joda-Time开源库
    Maven教程(4)--Maven管理Oracle驱动包
  • 原文地址:https://www.cnblogs.com/gotodsp/p/6390011.html
Copyright © 2020-2023  润新知