Допустим, у меня есть процесс с идентификатором сеанса 10030. Есть ли способ удалить текущий процесс из этого сеанса и назначить его другому? Или, по крайней мере, удалить из этой сессии? Я читал это: The session's ID is the same as the pid of the process that created the session through the setsid() system call. That process is known as the session leader for that session group. All of that process's descendants are then members of that session unless they specifically remove themselves from it.
Но, к сожалению, я не мог найти способ «they specifically remove themselves from it». Надеюсь, ты поможешь. спасибо.
Если это одноразовая вещь, вот техника, использующая gdb для присоединения к запущенному процессу:
Запустите образец программы. Мы будем изменять sid sleep.
spectras@etherbee:~$ (echo;sleep 86400)&
[1] 23340
Вот наш sleep процесс:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23340 22112 0 14:50 pts/5 00:00:00 sleep 86400
Давайте присоединимся к нему с помощью gdb. Обратите внимание, что это остановит процесс.
spectras@etherbee:~$ gdb -p 23342
[lots of irrelevant text]
Attaching to process 23342
[more irrelevant text]
(gdb) p setsid()
$1 = 23342
(gdb) q
A debugging session is active.
Inferior 1 [process 23342] will be detached.
Quit anyway? (y or n) y
Detaching from program: /bin/sleep, process 23342
Давайте посмотрим на результат:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23342 23342 0 14:50 ? 00:00:00 sleep 86400
Наш sleep теперь является лидером группы процессов своей собственной сессии. [!d5 ]
Если это одноразовая вещь, вот техника, использующая gdb для присоединения к запущенному процессу:
Запустите образец программы. Мы будем изменять sid sleep.
spectras@etherbee:~$ (echo;sleep 86400)&
[1] 23340
Вот наш sleep процесс:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23340 22112 0 14:50 pts/5 00:00:00 sleep 86400
Давайте присоединимся к нему с помощью gdb. Обратите внимание, что это остановит процесс.
spectras@etherbee:~$ gdb -p 23342
[lots of irrelevant text]
Attaching to process 23342
[more irrelevant text]
(gdb) p setsid()
$1 = 23342
(gdb) q
A debugging session is active.
Inferior 1 [process 23342] will be detached.
Quit anyway? (y or n) y
Detaching from program: /bin/sleep, process 23342
Давайте посмотрим на результат:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23342 23342 0 14:50 ? 00:00:00 sleep 86400
Наш sleep теперь является лидером группы процессов своей собственной сессии.
Если это одноразовая вещь, вот техника, использующая gdb для присоединения к запущенному процессу:
Запустите образец программы. Мы будем изменять sid sleep.
spectras@etherbee:~$ (echo;sleep 86400)&
[1] 23340
Вот наш sleep процесс:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23340 22112 0 14:50 pts/5 00:00:00 sleep 86400
Давайте присоединимся к нему с помощью gdb. Обратите внимание, что это остановит процесс.
spectras@etherbee:~$ gdb -p 23342
[lots of irrelevant text]
Attaching to process 23342
[more irrelevant text]
(gdb) p setsid()
$1 = 23342
(gdb) q
A debugging session is active.
Inferior 1 [process 23342] will be detached.
Quit anyway? (y or n) y
Detaching from program: /bin/sleep, process 23342
Давайте посмотрим на результат:
spectras@etherbee:~$ ps -efj -q 23342
UID PID PPID PGID SID C STIME TTY TIME CMD
spectras 23342 23340 23342 23342 0 14:50 ? 00:00:00 sleep 86400
Наш sleep теперь является лидером группы процессов своей собственной сессии.