小编Cas*_*tor的帖子

编写Linux shell脚本以安全地从终端分离程序

我正在尝试编写一个Linux shell脚本(最好是命名为bash)detach.sh,以便安全地从终端分离程序,这样:

  1. 调用:./detach.sh prog [arg1 arg2 ...].

  2. exec-able,例如.通过在shell中运行它:

    exec ./detach.sh prog [arg1 arg2 ...]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过适当的引用(主要处理包含空格的参数).

  4. 丢弃输出(因为它们是不需要的).

  5. 不使用screen,tmux等等(与4相同的原因,加上不需要额外的保姆过程).

  6. 使用(合理地)可移植命令和程序,并且没有类似于start-stop-daemon特定于发行版的内容.

我想到了几种方法(#!/bin/bash为了简洁而忽略了shebang线):

  1. nohup:

    nohup "$@" >& /dev/null &
    
    Run Code Online (Sandbox Code Playgroud)
  2. disown:

    "$@" >& /dev/null &
    disown
    
    Run Code Online (Sandbox Code Playgroud)
  3. setsid:

    setsid "$@" >& /dev/null &
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用子shell:

    ("$@" >& /dev/null &)
    
    Run Code Online (Sandbox Code Playgroud)
  5. nohup/ setsid结合子壳:

    # Or alternatively:
    # (nohup "$@" >& /dev/null &)
    (setsid "$@" >& /dev/null &)
    
    Run Code Online (Sandbox Code Playgroud)

gedit用作测试程序(代替该 …

bash shell scripting

9
推荐指数
1
解决办法
5299
查看次数

标签 统计

bash ×1

scripting ×1

shell ×1