AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 411036
Accepted
s-m-e
s-m-e
Asked: 2017-12-16 03:34:51 +0800 CST2017-12-16 03:34:51 +0800 CST 2017-12-16 03:34:51 +0800 CST

`sudo setsid command`不会产生新的进程组?

  • 772

我正在研究一个我想在sudo软件测试中运行程序/命令的场景。这些命令是从基于subprocess模块的 Python 脚本启动的。我试图避免必须以超级用户权限运行整个测试套件。

假设出于本示例的目的,它是top. 我的命令启动了它自己的一些子进程,并且可能会陷入死锁。超时后,我想杀死它(和它的孩子)。显而易见的解决方案似乎是让我的命令负责一个新的会话/进程组,允许我一次完全杀死它及其子进程。我不知道如何使它与sudo. 在我的情况下,sudo总是无一例外地受到密码保护,我想保持这种方式......如果可能的话。

  1. 作品:setsid top
  2. 有效,但不会产生新的进程组:sudo setsid top
  3. 有问题 - 很难以安全可靠的方式获取 root 密码:setsid sudo top

我没有设法使(3)以干净的方式工作。我搞砸了SUDO_ASKPASS。

令我惊讶的是 (2) 实际运行但没有给我所需的新进程组。

systemd─┬─ ...
        ├─kdeinit5─┬─ ...
        │          └─yakuake─┬─2*[bash]
        │                    ├─bash───sudo───top
        │                    ├─bash───pstree
        ...
sudo session
  • 1 1 个回答
  • 1421 Views

1 个回答

  • Voted
  1. Best Answer
    s-m-e
    2017-12-16T08:08:00+08:002017-12-16T08:08:00+08:00

    场景 2 可以这样修复,无需使用setsid:

    sudo -b command

    sudo这将在系统的 init 进程(包括命令)的正下方创建一个新进程组。


    不过,有一点建议:如果使用 Python 启动这样的进程组,则生成subprocess.Popen的对象PID(团体)。我的解决方法(需要):subprocess.Popen(...).pidPGIDkill -9 -- -{PGID}psutil

    import os
    import psutil
    import subprocess
    
    def __get_pid__(cmd_line_list):
        for pid in psutil.pids():
            proc = psutil.Process(pid)
            if cmd_line_list == proc.cmdline():
                return proc.pid
        return None
    
    cmd = ['sudo', '-b', 'command']
    cmd_proc = subprocess.Popen(cmd)
    
    print('Wrong PGID: %d' % os.getpgid(cmd_proc.pid))
    print('Right PGID: %d' % os.getpgid(__get_pid__(cmd)))
    
    • 1

相关问题

  • SSH 会话和 ClientAlive 问题

  • 从 tmux 会话回显某些内容到基础会话

  • sudo nautilus 和 sudo -E nautilus 的区别

  • 以其他用户身份运行单个命令;sudo 的限制

  • 允许用户以 root 身份运行命令

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve