Как я могу получить только процессы предков данного процесса?

Код в check_smtp_send содержит ошибки. Он либо напрямую указывает недопустимую строку для SSL_version , либо использует модуль, который делает это (очень старый и неподдерживаемый модуль Net :: SMTP :: TLS известен этой ошибкой). Возможно, это исправлено в более новых версиях кода.

Но, учитывая, что я понятия не имею, какую ОС вы используете, к какому пакету принадлежит этот код, и если это известная ошибка или нет, я не могу помочь, вместо этого говоря, что она либо уже исправлена, и вам следует обновить, либо это необходимо Быть исправленным. В последнем случае я могу помочь, но тогда мне понадобится доступ к рассматриваемому коду.

Дополнительную информацию об этом типе проблемы вы можете найти в неверная версия SSL_version, указанная в /usr/share/perl5/IO/Socket/SSL.pm, строка 332 . Там вы найдете прямую причину (плохая версия SSL_), косвенная причина (более строгие проверки SSL_version в новых версиях IO :: Socket :: SSL) и то, как исправить это в коде (исправить SSL_version в ошибочном коде, не обойти, изменив IO :: Socket :: SSL).

На основе https://exchange.nagios.org/directory/Plugins/Email-and-Groupware/check_email_delivery/details : - последний раз пакет обновлялся в 2011 г. {{1 }} - он использует старый Net :: SMTP :: TLS , который вызывает проблему

Обходной путь - просто удалить часть, которая устанавливает неправильную версию SSL из Net :: SMTP :: TLS. Это должна быть строка 182, см. https://metacpan.org/source/AWESTHOLM/Net-SMTP-TLS-0.12/lib/Net/SMTP/TLS.pm#L182 .

До:

    if(not IO::Socket::SSL::socket_to_SSL($me->{sock},
            SSL_version     =>   "SSLv3 TLSv1")){
                    croak "Couldn't start TLS: ".IO::Socket::SSL::errstr."\n";
     }

После:

    if(not IO::Socket::SSL::socket_to_SSL($me->{sock})){
                    croak "Couldn't start TLS: ".IO::Socket::SSL::errstr."\n";
    }

0
29.07.2018, 07:48
2 ответа

Вы всегда можете пройтись по древу предков вручную, используяps -o ppid=:

#! /bin/bash -
pid=${1?Please give a pid}
while
  [ "$pid" -gt 0 ] &&
    read -r ppid name < <(ps -o ppid= -o comm= -p "$pid")
do
  printf '%s\n' "$pid $name"
  pid=$ppid
done

Или чтобы не запускать psнесколько раз:

#! /bin/sh -
pid=${1?Please give a pid}
ps -Ao pid= -o ppid= -o comm= |
  awk -v p="$pid" '
    {
      pid = $1; ppid[pid] = $2
      sub(/([[:space:]]*[[:digit:]]+){2}[[:space:]]*/, "")
      name[pid] = $0
    }
    END {
      while (p) {
        print p, name[p]
        p = ppid[p]
      }
    }'
5
28.01.2020, 02:14

Вы можете попробовать следующее, я нашел это на справочной странице Linux:-ч Это выделяет текущий процесс и его предков. -сущ. Это будет сортировать процессы с одним и тем же предком по PID, а не по имени.

2
28.01.2020, 02:14

Теги

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