关于该pkill
命令,我知道可以杀死进程 - for具体场景- 基于通过tty[1-6]
和pts/[0-N]
.我测试并按预期工作。到这里一切都好。
但现在,根据这个答案和解决方案:
它表明(提取):
pkill 和killall 也是kill 系统调用的包装器(实际上是直接调用系统调用的libc 库),但可以根据进程名称、进程所有者等信息确定PID。会话ID, ETC。
观察会话ID部分。我确实检查了两者man
,并且仅存在此功能以pkill
符合以下任一条件:
分别如下:
-s sid,...
Only match processes whose process session ID is listed.
Session ID 0 is translated into pgrep's or pkill's own session ID.
-s, --session sid,...
Only match processes whose process session ID is listed.
Session ID 0 is translated into pgrep's or pkill's own session ID.
正如您所看到的,内容是相同的,只是选项/参数名称略有不同。
如果我使用:
- 直接控制台,因此可以使用
pkill
它来tty[1-6]
杀死某些东西 - 通过远程连接
ssh
,因此可以使用pkill
它来pts/[0-N]
杀死某些东西。
发这个帖子的原因:
问题
- 什么是会话ID意思是在
pkill
上下文中?
额外问题
- 怎么样?会话ID创建?
- 如何知道/检索列表会话 ID用于
pkill
?
答案1
会话 ID 是进程会话的标识符。会话是一个与 shell 作业控制相关的概念,其级别高于进程组;给定会话中的所有进程共享同一个控制终端。在非图形环境中,会话可以被认为是登录会话(至少,这是最初想法的一部分;它们不能与在基于 systemd 的环境中跟踪登录会话的 systemd 会话混淆)。
会话是通过调用创建的setsid
;也可以看看他们的描述在man credentials
。这些链接指向特定于 Linux 的文档,但这不是特定于 Linux 的;也可以看看POSIX 规范setsid
。
ps
可以显示会话 ID:
ps -eo pid,sess,args