ssh

Landstreicher

сабж ведет себя следующим образом: если я залогинился на тачку, запустил там некий фоновой процесс (скажем ./my_program & то если выйти из shell-а, он будет ждать пока не завершится этот процесс. А если процесс не должен завершаться (например демон какой-нибудь то этот ssh будет "висеть". Можно ли отключить эти проявления искусственного интеллекта, чтобы он выходил сразу?

ruler


The shell exits by default upon receipt of a SIGHUP.
Before exiting, an interactive shell resends the SIGHUP to
all jobs, running or stopped. Stopped jobs are sent SIG-
CONT to ensure that they receive the SIGHUP. To prevent
the shell from sending the signal to a particular job, it
should be removed from the jobs table with the disown
builtin (see SHELL BUILTIN COMMANDS below) or marked to
not receive SIGHUP using disown -h.

ruler

Можно еще, кстати, screen пользоваться. Но это непрямое решение.

Landstreicher

Я совсем про другое спросил. С shell-ом все в порядке, он выходит (его нет в списке процессов). А вот sshd - остается висеть.

abrek

Google приводит прямо на OpenSSH FAQ
Нужно чтобы демон не оставлял открытым терминал

ruler


Надо поставить себе за правило умываться в два раза дольше
Из man sshd:

When the user program terminates and all forwarded X11 and other connec-
tions have been closed, the server sends command exit status to the
client, and both sides exit.


Выходит, что должен sshd выходить.

sergey_m

Если процесс выполнит daemon то ssh уже о нем не узнает.

sergey_m

> Нужно чтобы демон не оставлял открытым терминал
Он по определению этого не делает.

abrek

"In theory, theory and practice are the same thing, but in practice, they're different." (c) unknown

ruler

"In theory, theory and practice are the same thing, but in practice, they're different." (c) unknown
Супер

sergey_m

There 10 types of people: ones who understand binary, and those who not.

Landstreicher

На самом деле ситуация такая. Я захожу на комп, делаю insmod на некоторый модуль. Этот модуль несколько раз вызывает функцию kernel_thread запуская новый процесс. Как это ни странно, но у этих процессов стандартные дескрипторы 0, 1, 2 указывают на /dev/pts/0 (информация из /proc). Теперь понятно, почему sshd не завершается - ждет пока pts/0 закроют. Отсюда 2 вопроса:
1) можно ли принудительно сказать sshd чтобы выходил если завершается bash который он запустил?
2) неужели все эти файловые дескрипторы наследуются от modprobe в модуль? если да, то выходит их нужно принудительно закрывать в модуле? я почему-то думал что все эти ядерные вещи лишены stdin и stdout...

abrek

баг в module
AFAICS надо вызывать daemonize

Landstreicher

Большой thanx! Помогло, теперь нормально работает.
Оставить комментарий
Имя или ник:
Комментарий: