Новый процесс будет создан в fork()
звоните, и запустится путем возврата из него точно так же, как родитель. Возвращаемое значение (в котором Вы сохранили retval
) от fork()
будет:
Ваш код тестирования работает правильно; это хранит возвращаемое значение от fork()
в child_pid
и использование if
проверять, ли это 0 или не (хотя это не проверяет на ошибку),
Вот несколько вещей, которые можно попробовать:
1) Это наиболее вероятно оболочка, которая испытывает таймаут. Отключите тайм-аут путем сбрасывания TMOUT
в Вашем профиле. TMOUT
число секунд, что удар ожидает входа перед завершением. Эхо $TMOUT
видеть, установлено ли это. Добавьте следующее к своему профилю:
unset TMOUT
2) Настройте PuTTY для отправки пакетов проверки активности путем входа:
Settings > Connection > Seconds between keepalives = 60
3) Настройте Ваш sshd_config
(обычно найденный в /etc/ssh
) и добавьте:
TCPKeepAlive yes
ClientAliveInterval 60
Сохраните файл и перезапуск sshd
.
Это наиболее вероятно брандмауэр, который сокращает Ваше неактивное соединение через некоторое время.
Можно настроить openssh
сервер или клиент для отправки KeepAlive через некоторое время.
Отправляйте KeepAlive каждые 5 минут на сервер:
ssh user@server -o ServerAliveInterval=300
Если Вы управляете openssh-server
, можно также отправить KeepAlives клиенту после определенного интервала. Добавьте следующее к /etc/ssh/sshd_config
:
ClientAliveInterval 300
TCPKeepAlive yes
TCPKeepAlive
должен быть yes
по умолчанию.
Перезапустите openssh-server
после модификации:
/etc/init.d/ssh restart
ClientAliveInterval
– c2h2 19.01.2011, 19:53