代码之家  ›  专栏  ›  技术社区  ›  Kirill Frolov

外壳,管道接收端的作业控制

  •  1
  • Kirill Frolov  · 技术社区  · 7 年前

    我不明白,为什么我不能在后台运行某个进程(本例中为“cat”),然后再将其置于前台:

    $ dash
    $ f() { cat </dev/stdin > /dev/stdout &  sleep 1; fg ; }
    $ sleep 2 | f
    dash: 1: fg: job (null) not created under job control
    $ set -m 
    $ sleep 2 | f
    dash: 1: fg: job (null) not created under job control
    $ f() { set -m; cat </dev/stdin > /dev/stdout &  sleep 1; fg ; }
    $ sleep 2 | f
    dash: 5: fg: job (null) not created under job control
    

    为什么每次我都收到错误消息?

    在没有管道的情况下运行函数“f”时,有时我没有此类消息:

    $ set +m
    $ f
    cat 0</dev/stdin 1>/dev/stdout
    ^C
    $ set -m
    $ f
    cat 0</dev/stdin 1>/dev/stdout
    ^C
    
    0 回复  |  直到 7 年前
    推荐文章