gpt4 book ai didi

macos - OS X 是否支持 POSIX session ?

转载 作者:行者123 更新时间:2023-12-03 19:09:03 30 4
gpt4 key购买 nike

我正在开发一个可以充分利用 POSIX session 的项目(如 here 所述),但我现在不确定我是否误解了这个概念和/或 OS X 是否甚至支持进程 session 。

OS X 10.9 有一个 setsid(2)系统调用但使用参数调用它 0, 0似乎没有注意到。并查看 ps -e -o pid,pgid,sess 的输出显示所有进程的 session ID 为 0 :

  PID  PGID   SESS
1 1 0
11 11 0
12 12 0
13 13 0
14 14 0
15 15 0
16 16 0
17 17 0
[...]

OS X 是否支持进程的 POSIX session ,如果不支持,是否有另一种机制,例如shell 可以用来向所有从该 shell 启动的进程发送信号吗?

除了查看系统上的事件进程外,我还使用了 ersatz-setsid在新 session 中运行进程的命令行工具,但没有成功:
$ ./setsid sleep 1000
$ ps -eo pid,pgid,sess,command
PID PGID SESS COMMAND
[...]
10650 10650 0 sleep 1000
[...]

最佳答案

正如 asyncronos 所指出的,macOS 确实支持 POSIX session 的概念,但它没有提供通过 ps(1) 查询 session ID 的规定。或 top(8) ;这就是为什么你看到 0。

添加一些细节:
ps用途 sysctl(3)收集正在运行的进程列表。该列表作为数组返回(对于 64 位机器)struct user64_kinfo_proc ( xnu/bsd/sys/sysctl.h )。用户域定义为 struct kinfo_proc ( /usr/include/sys/sysctl.h )。

处理该数组填充的内核函数是 sysctl_prochandle() ( xnu/bsd/kern/kern_sysctl.c )。

反过来,它调用 fill_user64_eproc填写 struct user64_eproc , user64_kinfo_proc成员(member).
user64_eproc是(我猜)会有 e_psid 的数据结构表示给定进程的 session ID 的成员。因此,它没有成员。 fill_user64_eproc使用进程的 struct session设置一些标志并将进程的组 ID 记录到 user64_eproc ,但它不会记录 session id,因为它无处可放。

有趣的是,来源为ps有栏目ifdef出来访问 kinfo_proc.ki_sid .当然,这个成员也不存在。

所以,我确定 怎么样它没有返回,但不是 为什么 , 很遗憾。

关于macos - OS X 是否支持 POSIX session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248294/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com