【问题标题】:Getting the PID of just started screen session获取刚刚开始的屏幕会话的 PID
【发布时间】:2023-03-08 19:35:01
【问题描述】:

如何获取刚刚创建的屏幕会话的 PID 喜欢:

screen -dm -S test ping localhost

screen -ls
There is a screen on:

3310.test       (09/04/15 14:07:41)     (Detached)

我想要 3310

我正在查看Bash: Getting PID of daemonized screen session,但它不符合我的需要。

我一直在尝试什么

screen -dm -s test ping localhost | echo $! 

但是 pid 差了两个或一个

【问题讨论】:

    标签: linux bash session pid gnu-screen


    【解决方案1】:

    试试看:

    screen -dm -S test ping localhost & echo $!
    

    它在后台启动屏幕进程(-d 的屏幕无论如何都会以“分离模式”启动)并打印其 PID。

    【讨论】:

    • user@ubuntu:~$ screen -dm -S test ping localhost & echo $! [1] 3416 3416 user@ubuntu:~$ screen -ls There is a screen on: 3417.test (09/04/15 14:22:53) (Detached) 1 Socket in /var/run/screen/S-user. [1]+ Done screen -dm -S test ping localhost 似乎恰好将 pid 减 1。
    • 嗯,screen 调用 clone() 并创建一个子进程,其 pid 是下一个可用的(所以并不总是 +1)。这有点间接,但您可以执行以下操作:strace screen -dm -S test ping localhost 2>&1 | awk '$0~/^clone/{print $NF}' 它对 screen 的父进程进行 strace,搜索克隆系统调用并提取 pid。
    • 谢谢。我最终只是设置了一个预定义的唯一名称,并在 screen -ls 中使用 grep 名称并匹配以获取 pid。
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2020-12-04
    • 2011-06-12
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多