Смена процесса процесса

Допустим, у меня есть процесс с идентификатором сеанса 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». Надеюсь, ты поможешь. спасибо.

1
задан 27 June 2017 в 16:16

3 ответа

Если это одноразовая вещь, вот техника, использующая 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 ]

0
ответ дан 22 May 2018 в 21:06
  • 1
    Большое спасибо за ответ. Но есть ли способ сделать это программно? Я имею в виду код (скрипт), который можно запустить внутри процесса для изменения идентификатора сеанса? – user3503143 28 June 2017 в 09:21
  • 2
    gdb поддерживает параметр -ex для передачи команд из сценария. Не должно быть слишком сложно автоматизировать. – spectras 28 June 2017 в 09:53
  • 3
    вы, например, выше, такие же, как и процесс, который находится в команде сеанса setsid, и становятся листами сеанса другого сеанса справа? – user3503143 28 June 2017 в 10:56
  • 4
    @ User3503143 & GT; в точку. На самом деле мы приостанавливаем процесс, когда мы привязываемся к нему, мы вынуждаем его запускать setsid() и останавливать его при отсоединении. Таким образом, он становится лидером сессии нового сеанса. – spectras 28 June 2017 в 11:20

Если это одноразовая вещь, вот техника, использующая 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 теперь является лидером группы процессов своей собственной сессии.

0
ответ дан 18 July 2018 в 11:02

Если это одноразовая вещь, вот техника, использующая 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 теперь является лидером группы процессов своей собственной сессии.

0
ответ дан 24 July 2018 в 19:42

Другие вопросы по тегам:

Похожие вопросы: