Можно использовать функцию perl kill (0, $ pid)
.
Если код возврата равен 1, значит, PID существует, и вам разрешено посылать ему сигнал.
Если код возврата 0, вам нужно проверить $ !.Это может быть EPERM (в разрешении отказано), что означает, что процесс существует, или ESRCH, в этом случае процесс не существует.
Если ваш проверочный код работает как root
, вы можете упростить это, просто проверяя код возврата kill; 0 => ошибка, 1 => ОК
Например:
% perl -d -e 0
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(-e:1): 0
DB<1> print kill(0,500)
0
DB<2> print $!
No such process
DB<3> print kill(0,1)
0
DB<4> print $!
Operation not permitted
DB<5> print kill(0,$$)
1
Это может быть преобразовано в простую функцию
use Errno;
sub test_pid($)
{
my ($pid)=@_;
my $not_present=(!kill(0,$pid) && $! == Errno::ESRCH);
return($not_present);
}
print "PID 500 not present\n" if test_pid(500);
print "PID 1 not present\n" if test_pid(1);
print "PID $$ not present\n" if test_pid($$);
У меня была та же проблема, я решил ее следующим образом:
На ssh-сервере я раскомментировал, и введите в yes следующие значения в / etc / ssh / sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
И затем:
sudo service sshd restart
Одним из источников этих сообщений является https://sshcheck.com/, что указывает на возможную слабость вашего сервера ssh. .
Это вызывает примерно 4 таких сообщения последовательно.
Другим источником подобных сообщений является ssh-keyscan
. Он просто захватывает ключи хоста сервера и отключается без какой-либо аутентификации.
Я столкнулся с такой же ситуацией, потому что правило iptables
INPUT было DROP, но ACCEPT ansible host, но правила нетiptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Журнал ошибок "Nov 3 01:34:50 debian sshd[29378]: Connection closed by 10.17.64.13 [preauth]"
был записан в "/var/log/auth.log"
на клиентской машине после запуска команды ansible all -m ping
на доступном хосте.
Поскольку пакет ping был получен клиентом, но не возвращен на доступный хост.
В моем случае на мою машину была совершена DoS-атака. Сервер достиг предела одновременно открытых файлов и не смог открыть файл authorized_keys
для подтверждения моей личности.
VFS: file-max limit XXXXX reached
сообщения в dmesg
появились, информирующие о проблеме после того, как мне наконец удалось войти в систему.
Мой, наверное, самый глупый.
Я добавил ключ SSH к виртуальной машине Google Cloud Platform, и она выбрала имя пользователя и сохранила под ним ключ, в то время как я думал, что это просто ключ метаданных, и пытался подключиться к стандартное имя пользователя "admin".
Вход через веб-SSH и ручной поиск нужного файла .ssh/authorized_keys
помогли мне выявить проблему. Надеюсь, это поможет кому-то, пришедшему из поиска Google