1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <hurd.h>
20: pid_t _hurd_pid, _hurd_ppid, _hurd_pgrp;
21: int _hurd_orphaned;
22:
23: static void
24: init_pids (void)
25: {
26: __USEPORT (PROC,
27: ({
28: __proc_getpids (port, &_hurd_pid, &_hurd_ppid, &_hurd_orphaned);
29: __proc_getpgrp (port, _hurd_pid, &_hurd_pgrp);
30: }));
31:
32: (void) &init_pids;
33: }
34:
35: text_set_element (_hurd_proc_subinit, init_pids);
36: ^L
37: #include <hurd/msg_server.h>
38: #include "set-hooks.h"
39: #include <cthreads.h>
40:
41: DEFINE_HOOK (_hurd_pgrp_changed_hook, (pid_t));
42:
43:
44: unsigned int _hurd_pids_changed_stamp;
45: struct condition _hurd_pids_changed_sync;
46:
47: kern_return_t
48: _S_msg_proc_newids (mach_port_t me,
49: task_t task,
50: pid_t ppid, pid_t pgrp, int orphaned)
51: {
52: int pgrp_changed;
53:
54: if (task != __mach_task_self ())
55: return EPERM;
56:
57: __mach_port_deallocate (__mach_task_self (), task);
58:
59: pgrp_changed = pgrp != _hurd_pgrp;
60: _hurd_ppid = ppid;
61: _hurd_pgrp = pgrp;
62: _hurd_orphaned = orphaned;
63:
64: if (pgrp_changed)
65:
66: RUN_HOOK (_hurd_pgrp_changed_hook, (pgrp));
67:
68:
69: ++_hurd_pids_changed_stamp;
70:
71: return 0;
72: }