Некоторые приложения, не открывающиеся на CentOS 7

Коды выхода указывают на условия отказа при завершении программы и находятся в диапазоне от 0 до 255. Оболочка и ее встроенные модули могут использовать значения выше 125 для обозначения конкретных режимов сбоя, поэтому список кодов может отличаться в разных оболочках и операционных системах (например, Bash использует значение 128+N в качестве статуса выхода). См: Bash - 3.7.5 Статус выхода или man bash.

В общем случае нулевой статус выхода указывает на то, что команда удалась, ненулевой статус выхода указывает на неудачу.

Чтобы проверить, какой код ошибки возвращен командой, вы можете напечатать $? для последнего кода выхода или ${PIPESTATUS[@]}, который дает список значений статуса выхода из конвейера (в Bash) после выхода сценария оболочки.

Не существует полного списка всех кодов выхода, которые можно найти, однако была попытка систематизировать номера статусов выхода в исходных текстах ядра, но это в основном предназначено для программистов на C/C++, и подобный стандарт для сценариев может быть уместен.

Некоторый список сисекситов в Linux и BSD/OS X с предпочтительными кодами выхода для программ (64-78) можно найти в /usr/include/sysexits.h (или: man sysexits на BSD):

0   /* successful termination */
64  /* base value for error messages */
64  /* command line usage error */
65  /* data format error */
66  /* cannot open input */
67  /* addressee unknown */
68  /* host name unknown */
69  /* service unavailable */
70  /* internal software error */
71  /* system error (e.g., can't fork) */
72  /* critical OS file missing */
73  /* can't create (user) output file */
74  /* input/output error */
75  /* temp failure; user is invited to retry */
76  /* remote error in protocol */
77  /* permission denied */
78  /* configuration error */
/* maximum listed value */

Приведенный выше список распределяет ранее неиспользованные коды выхода из 64-78. В будущем диапазон нераспределенных кодов выхода будет еще более ограничен.

Однако приведенные выше значения в основном используются в sendmail и не используются почти никем другим, поэтому они не являются чем-то даже отдаленно близким к стандарту (на что указывает @Gilles).

В shell статус завершения следующий (на основе Bash):

  • 1-125 - Команда не завершилась успешно. Проверьте значение статуса в man-странице команды, несколько примеров ниже:

  • 1 - Catchall для общих ошибок

    Различные ошибки, такие как "деление на ноль" и другие недопустимые операции.

    Пример:

    $ let "var1 = 1/0"; echo $?
    -bash: let: var1 = 1/0: деление на 0 (маркер ошибки - "0")
    1
    
  • 2 - Неправильное использование встроенных модулей оболочки (согласно документации Bash)

    Недостающее ключевое слово или команда, или проблема с разрешением (и код возврата diff при неудачном сравнении двоичных файлов).

    Example:

     empty_function() {}
    
  • 6 - Нет такого устройства или адреса

    Пример:

    $ curl foo; echo $?
    curl: (6) Could not resolve host: foo
    6
    
  • 124 - команда завершилась

  • 125 - если сама команда не выполниласьсм: coreutils
  • 126 - если команда найдена, но не может быть вызвана (например, не является исполняемой)

    Проблема с разрешением или команда не является исполняемой.

    Example:

    $ /dev/null
    $ /etc/hosts; echo $?
    -bash: /etc/hosts: Разрешение отклонено
    126
    
  • 127 - если команда не может быть найдена, дочерний процесс, созданный для ее выполнения, возвращает этот статус

    Возможная проблема с $PATH или опечатка.

    Пример:

    $ foo; echo $?
    -bash: foo: команда не найдена
    127
    
  • 128 - Неверный аргумент к exit

    exit принимает только целочисленные аргументы в диапазоне 0 - 255.

    Пример:

    $ exit 3.14159
    -bash: exit: 3.14159: требуется числовой аргумент
    
  • 128-254 - сигнал фатальной ошибки "n" - команда умерла из-за получения сигнала. Код сигнала прибавляется к 128 (128 + SIGNAL) для получения статуса (Linux: man 7 signal, BSD: man signal), несколько примеров ниже:

  • 130 - команда завершилась из-за нажатия Ctrl-C, 130-128=2 (SIGINT)

    Пример:

    $ cat
    ^C
    $ echo $?
    130
    
  • 137 - если команде послан сигнал KILL(9) (128+9), статус выхода команды иначе

    kill -9 $PPID скрипта.

  • 141 - SIGPIPE - запись по трубе без читателя

    Пример:

    $ hexdump -n100000 /dev/urandom | tee &>/dev/null >(cat > file1.txt) >(cat > file2.txt) >(cat > file3.txt) >(cat > file4.txt) >(cat > file5.txt)
    $ find . -name '*.txt' -print0 | xargs -r0 cat | tee &>/dev/null >(head /dev/stdin > head.out) >(tail /dev/stdin > tail.out)
    xargs: cat: завершено сигналом 13
    $ echo ${PIPESTATUS[@]}
    0 125 141
    
  • 143 - команда завершена сигналом с кодом 15 (128+15=143)

    Пример:

    $ sleep 5 && killall sleep &
    [1] 19891
    $ sleep 100; echo $?
    Завершено: 15
    143
    
  • 255* - статус выхода вне диапазона.

    exit принимает только целочисленные аргументы в диапазоне 0 - 255.

    Пример:

    $ sh -c 'exit 3.14159'; echo $?
    sh: строка 0: exit: 3.14159: требуется числовой аргумент
    255
    

Согласно приведенной выше таблице, коды выхода 1 - 2, 126 - 165 и 255 имеют специальные значения, и поэтому их следует избегать для параметров выхода, задаваемых пользователем.

Обратите внимание, что значения выхода вне диапазона могут привести к неожиданным кодам выхода (например, выход 3809 дает код выхода 225, 3809 % 256 = 225).

См.:

3
17.12.2018, 22:50
1 ответ

Вероятно, есть другой запущенный процесс, который блокирует его, или есть файл, который его блокирует, например файл блокировки.

В терминале вы можете попробовать запустить его вручную, чтобы посмотреть, что происходит.

$ gnome-weather

Если вы не видите ничего конкретного с помощью этого метода, вам нужно начать отслеживать его. Обычно я делаю это так:

$ strace -s 2000 gnome-weather

Отладка с помощью straceможет быть немного сложной, поэтому начните с просмотра каталога /homeна наличие блокирующего его файла.

$ strace -s 2000 gnome-weather  |& grep -E open | grep -i /home

Затем посмотрите /etcи другие каталоги, чтобы увидеть, не зависает ли он при доступе к какому-либо конкретному файлу (чтение/запись ).

1
27.01.2020, 21:30

Теги

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