process-groups

发送信号到 tmux 窗格中的进程
process-groups

发送信号到 tmux 窗格中的进程

假设应用程序 X 在 tmux 窗格的前台运行。我想向应用程序 X 发送给定信号,例如 SIGUSR1。我可以配置 tmux 键绑定以向当前选定窗格的前台进程(或进程组)发送信号吗? ...

Admin

后台函数“$!”的PID给出错误的值
process-groups

后台函数“$!”的PID给出错误的值

我试图捕获在后台执行的函数的 PID,但我似乎得到了错误的数字。 请参阅以下脚本: $ cat test1.sh #!/bin/bash set -x child() { echo "Child thinks is $$" sleep 5m } child & child_pid="$!" echo "Parent thinks pid $child_pid" sleep 3 kill -- -"$child_pid" # but it is wrong, get "No such process" kill -- -"...

Admin

从子进程的角度来看,进程的父进程有什么意义吗?
process-groups

从子进程的角度来看,进程的父进程有什么意义吗?

在 POSIX 中,进程通过两个基本层次结构彼此“相关”: 父进程和子进程的层次结构。 会话和进程组的层次结构。 setpgid用户进程通过和可以对后者进行大量控制setsid,但对前者的控制却很少——父进程 ID 在进程生成时设置,并在父进程退出时由内核更改(通常为 PID 1) ),但除此之外它不会改变。回想起来,我一直在想,亲子关系到底有多重要? 到目前为止我的理解总结如下: 从孩子的角度来看,亲子关系显然很重要。家长进程,因为各种系统调用(例如wait和setpgid)仅允许在子进程上使用。 会话-组-进程的关系对于全部进程,无论是会话...

Admin

如何在自己的进程组中启动 bash 脚本
process-groups

如何在自己的进程组中启动 bash 脚本

我想从另一个 bash 脚本启动一个 bash 脚本,但在它自己的进程组中启动它,就像从终端运行它一样。 有几个类似的问题,但我找不到与我的示例相匹配的答案。 拿这两个脚本 $ cat main.sh #! /usr/bin/env bash set -e echo if this has been started in its own group the following will pass ps -o ppid,pgid,command $$ ps -o pgid | grep $$ echo passed $ cat wrapper.s...

Admin

进程组领导者的PID重用
process-groups

进程组领导者的PID重用

过去的进度组领导者的 PID 是否有可能被其他进程重用,并且后一个进程启动一个新的进程组?在这种情况下,第一个创建的进程组和第二个进程组具有相同的 PGID,我认为应该避免这种情况。 Linux 是否避免分配有效 PGID 的 PID? ...

Admin

为什么我们需要向包含已停止进程的新孤立进程组发送 SIGHUP?
process-groups

为什么我们需要向包含已停止进程的新孤立进程组发送 SIGHUP?

这UNIX 环境中的高级编程书(“APUE”)说 考虑一个分叉子进程然后终止的进程。虽然这没什么异常(这种情况经常发生),但是如果当父进程终止时子进程停止(使用作业控制)会发生什么?孩子将如何延续,孩子是否知道自己已成为孤儿? ... 如果进程组不是孤立的,则位于不同进程组但在同一会话中的父进程之一有可能会重新启动非孤立进程组中已停止的进程。 ... 由于当父进程终止时,该进程组将成为孤立进程,并且该进程组包含已停止的进程,因此 POSIX.1 要求向新孤立进程组中的每个进程发送挂起信号 (SIGHUP),然后...

Admin

默认情况下,内核是否会向成为孤立进程并包含已停止进程的进程组发送 SIGHUP 来终止所有进程?
process-groups

默认情况下,内核是否会向成为孤立进程并包含已停止进程的进程组发送 SIGHUP 来终止所有进程?

在Linux编程接口中 要了解为什么孤立进程组很重要,我们需要从 shell 作业控制的角度来看待事物。根据图 34-3 考虑以下场景: 在父进程退出之前,子进程被停止(可能是因为父进程向其发送了停止信号)。 当父进程退出时,shell 将从其作业列表中删除父进程的进程组。子进程被 init 收养并成为终端的后台进程。包含子进程的进程组是孤立的。 此时,没有进程通过 wait() 监视已停止子进程的状态。 由于 shell 没有创建子进程,因此它不知道子进程的存在,也不知道子进程与已故父进程属于同一进程组。此外...

Admin

对具有 groupid 1 的子项使用 waitpid
process-groups

对具有 groupid 1 的子项使用 waitpid

我搜索了很多但没有找到解决方案。所以这可能是一个愚蠢的问题。 waitpid的格式为 pid_t waitpid (pid_t pid, int *status, int options) pid 参数准确指定要等待的一个或多个进程。其价值观分为四个阵营: < -1 Wait for any child process whose process group ID is equal to the absolute value of this value. -1 Wait for any child process. This is the ...

Admin

`sudo setsid 命令`不会产生新的进程组?
process-groups

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

我正在考虑一个场景,我想运行一个程序/命令作为sudo软件测试的一部分。这些命令是从基于模块的 Python 脚本启动的subprocess。我试图避免必须使用超级用户权限运行整个测试套件。 就本示例而言,我们假设top。我的命令启动了它自己的一些子进程,并且可能会遇到死锁。超时后,我想杀死它(及其子项)。显而易见的解决方案似乎是让我的命令成为一个新会话/进程组的负责人,允许我立即杀死它及其子进程。我不知道如何使其与sudo.就我而言,sudo始终受到密码保护,无一例外,我希望保持这种方式......如果可能的话。 作品:setsid top 有效,但...

Admin

进程组ID是如何设置的?
process-groups

进程组ID是如何设置的?

我读到会话的ID与通过系统调用创建会话的进程的pid相同setsid(),但我没有找到任何有关如何设置进程组ID的信息。进程组ID与创建该进程组的进程的pid是否相同? ...

Admin

如何将进程从一个进程组移动到另一个进程组,以及如何列出每个进程组中的进程?
process-groups

如何将进程从一个进程组移动到另一个进程组,以及如何列出每个进程组中的进程?

根据我目前了解到的情况,一个终端只有一个会话,一个会话有一个或多个进程组,一个进程组有一个或多个进程。 下图说明了这一点: 我有两个问题: 如何将进程从一个进程组移动到另一个进程组? 如何列出每个进程组中的进程? 编辑:我的意思是如何从终端而不是以编程方式完成这两件事。 ...

Admin

如果 shell 正在运行程序,按下 Ctrl+C 时 shell 是否也会收到 SIGINT 信号?
process-groups

如果 shell 正在运行程序,按下 Ctrl+C 时 shell 是否也会收到 SIGINT 信号?

我读过,当您按下 时Ctrl+C,SIGINT就会向前台进程组。 现在这里接受的答案问题说: 基本上,您的信号被所有前台进程接收,即 shell 和程序, 我执行了catinside bash,发现PGIDforbash和cat是不同的,所以它们不属于同一个进程组。 所以当你按 时Ctrl+C,只会cat收到SIGINT信号(所以我引用的答案是错误的),我对吗? ...

Admin

Ctrl+C 可以向多个进程发送 SIGINT 信号吗?
process-groups

Ctrl+C 可以向多个进程发送 SIGINT 信号吗?

我读过,当您按Ctrl+时,C 信号SIGINT将发送到前台进程组。 你能给我一个例子来说明如何在前台进程组,因为我想看看如果按Ctrl+是否所有进程都会终止C。 ...

Admin