加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 从后台进程获取PID作为另一个用户运行

发布时间:2020-12-16 01:28:46 所属栏目:安全 来源:网络整理
导读:通过以下方式从提示中轻松获取后台进程ID: $my_daemon $echo $! 但是,如果我想以不同的用户身份运行它,例如: su - joe -c "/path/to/my_daemon ;" 现在我如何捕获my_daemon的PID? 简洁 – 有很多困难. 您必须安排su’d shell将子PID写入文件,然后选择输出
通过以下方式从提示中轻松获取后台进程ID:
$my_daemon &
$echo $!

但是,如果我想以不同的用户身份运行它,例如:

su - joe -c "/path/to/my_daemon &;"

现在我如何捕获my_daemon的PID?

简洁 – 有很多困难.

您必须安排su’d shell将子PID写入文件,然后选择输出.鉴于它将’joe’创建文件而不是’dex’,这增加了另一层复杂性.

最简单的解决方案可能是:

su - joe -c "/path/to/my_daemon & echo $! > /tmp/su.joe.$$"
bg=$(</tmp/su.joe.$$)
rm -f /tmp/su.joe.$$  # Probably fails - joe owns it,dex does not

下一个解决方案涉及使用备用文件描述符 – 数字3.

su - joe -c "/path/to/my_daemon 3>&- & echo $! 1>&3" 3>/tmp/su.joe.$$
bg=$(</tmp/su.joe.$$)
rm -f /tmp/su.joe.$$

如果你担心中断等(你可能应该这样),那么你也会陷入困境:

tmp=/tmp/su.joe.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
su - joe -c "/path/to/my_daemon 3>&- & echo $! 1>&3" 3>$tmp
bg=$(<$tmp)
rm -f $tmp
trap 0 1 2 3 13 15

(捕获的信号是HUP,INT,QUIT,PIPE和TERM – 加上0表示shell退出.)

警告:好理论 – 未经测试的代码……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读