如何在自己的进程组中启动一个进程?

2023-12-20

我想在自己的进程组中启动一个进程(或者,启动后更改其组)并且:

  • 让组中的进程响应Ctrl + C从航站楼
  • 获取进程组的id,以便我可以通过以下方式终止组中的所有进程kill命令。

注意:我尝试过setsid prog [args]但进程不响应终端的 Ctrl+C,我也无法获取新的进程组 ID。

我还尝试通过 Perl 更改进程组setpgrp($pid, $pid) and POSIX::setpgid($pid, $pid),无济于事。

编辑:更大的问题:

我有一个进程(单线程;我们称其为“多产”进程P)同步启动许多子进程(一个接着一个;当前一个子进程终止时,它启动一个新的子进程)。从终端,我希望能够杀死P以及它下面的进程树。为此,我可以简单地安排终止以下进程P的组。但是,默认行为是P位于其父进程的组中。这意味着P如果我杀死其中的所有进程,则 的父进程将被杀死P的小组,除非我有P和它的树在自己的组中。

我的目的是杀人P和它下面的树,但不是P的父母。另外,我无法修改P的代码本身。


“在自己的进程组中启动进程”是什么意思? shell 在自己的进程组中启动进程,这就是它进行作业控制的方式(通过为前台进程提供一个进程组,并为在后台启动的每个管道提供多个进程组)。

要查看 shell 为每个管道启动一个新的进程组,您可以执行以下操作:

ps fax -o pid,pgid,cmd | less

这将显示类似以下内容:

11816 11816  |   \_ /bin/bash
4759   4759  |       \_ ps fax -o pid,pgid,cmd
4760   4759  |       \_ less

请注意,shell 为管道创建了一个新的进程组,并且管道中的每个进程共享该进程组。

Edit:

我想我知道你在说什么。你正在呼唤system来自珀尔。显然,sh -c不会创建新的进程组,因为它是一个没有作业控制的 shell。

我会做的是fork,然后对孩子:

setpgrp;
system("ps fax -o pid,pgid,cmd");

and wait在父母身上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在自己的进程组中启动一个进程? 的相关文章

  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 父进程和子进程如何进行信号量操作?

    semget 调用是否在父进程和子进程之间共享信号量 我有这段代码 对于相同的代码 我观察到如果父进程首先运行 子进程有时会获得更改后的信号量值 但是当子进程首先运行时 父进程似乎永远不会携带更改后的信号量 为什么会发生这种情况 谁能向我解
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap

随机推荐

  • 元刷新和重定向页面?

    我创建了一个带有 META 标记的网页 如下所示 问题是移动浏览器不支持此元标记 尽管它确实在每个浏览器上的网络中正确重定向 网页的完整代码在这里
  • 无法使用 000webhost 连接到数据库

    我正在尝试学习 php 但是当我尝试连接到 mysql 数据库时 出现此错误 我认为代码本身没有任何问题 但主机端可能有错误 我使用的是000webhost 警告 mysqli mysqli mysqli mysqli 28000 1045
  • 如何修复“参数列表太长”错误?

    我执行了这个命令 从文件夹 train 中的大量文件 大约 3000 个 中删除所有出现的 perl pi e s g Users Kian Desktop Acsegment espslabs train 但我得到了这个错误 bin ba
  • 单词表-uima ruta

    实际上我在Wordlist中使用了一些CITY名称和PUBLISHERS名称 根据我的理解 Wordlist将注释文档中任何列表项的所有出现 但是我发现一个问题 当我更改列表项的顺序时 出现的次数增加或减少列表中的文本 例如 Script
  • WebApi Route 返回 Not Found in Orchard Module

    我正在创建一个 Orchard 模块 我想在其中添加 WebApi 控制器 我的模块 txt Name ModuleName AntiForgery enabled Author The Orchard Team Website http
  • 处理 XXX.js 的源映射花费的时间比 YYY 毫秒长,因此我们继续执行而不等待所有断点

    Edit 这实际上也发生在新创建的准系统 React Typescript 模板 ViteJS 应用程序上 并且零修改 在 App tsx 中放置断点会使 VS Code 调试器启动速度慢得难以忍受 原帖如下 我正在尝试 ViteJS 也许
  • 使用计时器间隔与任务延迟重复执行任务

    我正在实施一项预定的工作 例如方法 并已缩小到方法范围 一种实现计时器间隔 另一种基于任务延迟 我还考虑过使用 Azure 计时器触发的 Web 作业 但它们不能在多实例模式下工作 实际上 在多实例应用程序中 其中一个实例中仅触发一个触发器
  • C++11 无限制联合示例

    I read http www stroustrup com C 11FAQ html unions http www stroustrup com C 11FAQ html unions 但我无法编译给定的示例 union U1 int
  • Android:使用Raw PCM创建Wave文件,Wave文件无法播放

    我已经为波形文件创建了标题 但创建的波形文件无法播放 我用过这个https ccrma stanford edu courses 422 projects WaveFormat https ccrma stanford edu course
  • 古老的重叠菜单,如何对 activeX 进行 z 索引

    我的页面上有一个 ActiveX 我知道 ActiveX 废话 由于某些逻辑业务原因 我们必须使用 ActiveX 但是问题是我无法制作 ActiveX低于其他任何东西 太奇怪了 活生生的简单例子 http adwiza com x ocx
  • Gitlab CI / Docker:使用自定义映像进行作业

    这就是我做一些 linter 测试 eslint 的方法 linter image ubuntu 16 04 stage test tags testing before script apt get update y apt get in
  • Django 下载文件为空

    我正在编写一个简单的函数 用于从服务器下载某个文件到我的机器 该文件由其 id 表示是唯一的 文件被正确定位 并且下载完成 但是下载的文件 尽管命名为服务器上的文件 是空的 我的下载功能如下所示 def download course re
  • C++ 静态成员函数和变量

    我正在通过制作小型机器人模拟来学习 C 但在类内的静态成员函数方面遇到了麻烦 我的环境类定义如下 class Environment private int numOfRobots int numOfObstacles static voi
  • 引用 javascript 对象文字数组

    您将如何引用此结构中的车型 雅阁 CRV 普锐斯等 这是一个糟糕的结构吗 能够提取品牌 然后使用品牌来获取模型 然后使用模型来获取选项 var cars makes Honda models Accord 2dr 4dr CRV 2dr H
  • Java 8:对[方法]的引用不明确[重复]

    这个问题在这里已经有答案了 有谁明白为什么下面的代码在 Java 7 及以下版本中可以正常编译 但在 Java 8 中却失败了 public static void main String args throws Exception put
  • 如何让PSOldGen扩展以容纳非常大的对象?

    我有一个程序需要为一个非常大的对象分配堆空间 但我发现我得到了OutOfMemoryException当空闲堆似乎比大对象应该需要的多得多时 这个测试程序演示了这个问题 public class HeapTest public static
  • date_format 不是 sql 中可识别的内置函数名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我希望我的日期显示如下 Monday 1 April 2013 但在 SQL Server 中显示 Date format 函数不是可识别的
  • 使数组列表与众不同

    我的数组列表中有重复项 并且想要删除这些重复项以使其不同 我尝试使用 hastable 来删除重复项 但它破坏了顺序 如何在不改变插入顺序的情况下使其清晰 怎么样 using System Linq myArrayList new Arra
  • 将 VSCode 更新到 1.32.1 后开玩笑“未找到测试”

    我正在使用 vscode 配置调试笑话 这里是launch json配置 version 0 2 0 configurations type node request launch name Jest Current File progra
  • 如何在自己的进程组中启动一个进程?

    我想在自己的进程组中启动一个进程 或者 启动后更改其组 并且 让组中的进程响应Ctrl C从航站楼 获取进程组的id 以便我可以通过以下方式终止组中的所有进程kill命令 注意 我尝试过setsid prog args 但进程不响应终端的