'Сегментация дает сбой' сообщение, прибывшее под STDERR?

Обычно:

  • они перезаписываемы владельцем (поддержать /bin, /usr/bin, ...)

  • они исполняемый файл и читаемый всеми остальными

Но Ваш вопрос должен вместо этого быть:

  • кто должен смочь изменить каталог?

  • кто должен смочь считать содержание и выполнить двоичные файлы?

После того как Вы отвечаете на эти вопросы, полномочия просты.

Пример:

$ ls -ld /bin /usr/bin /usr/local/bin ${HOME}/bin
drwxr-xr-x     8 corti  corti    272 Apr 11  2011 /Users/corti/bin
drwxr-xr-x    39 root   wheel   1326 Jul 21 19:37 /bin
drwxr-xr-x   948 root   admin  32232 Oct 10 08:36 /opt/local/bin/
drwxr-xr-x  1205 root   wheel  40970 Oct  5 09:01 /usr/bin
18
31.10.2012, 05:15
2 ответа

Отказ сегментации является сигналом, если Вы не поймаете это затем, то Ваша программа будет завершена, и Ваша оболочка распечатает это к своему stderr (а не stderr Вашей программы).

Или для Вашей программы или для оболочки возможно принять определенные меры, когда это происходит, или программой, ловя сигнал или Вашей оболочкой, захватывающей сигнал SIGCHILD и затем проверяющей статус выхода Вашего ребенка.

15
27.01.2020, 19:46
  • 1
    @user13107 help trap –  Carlos Campderrós 30.10.2012, 10:31
  • 2
    да. получил его. если кто-либо заинтересовал, вот то, что я сделал pastebin.com/QyeJYYHC –  user13107 30.10.2012, 11:50
  • 3
    Оболочка trap управляйте сигналами прерываний, отправленными в оболочку. Таким образом, это не будет работать для ловли того, отправляемого в программу. –  derobert 31.10.2012, 13:36
  • 4
    @warl0ck, возможно поймать segfault таким же образом, Вы ловите любой сигнал, однако это может привести к неопределенному поведению, но если Вы знаете то, что Вы делаете, Вы можете, по крайней мере, умирать разумным способом. OP хотел распечатать к stderr в этом случае, ловя segfault, и печать безопасна. –  cjh 31.10.2012, 20:43
  • 5
    @warl0ck: Вы можете, это быть просто очень плохой идеей сделать что-либо в обработчике кроме журнала и выхода. Существуют некоторые специализированные варианты использования все же. –  Linuxios 06.11.2012, 00:38

“Сообщение” отказа сегментации печатается к stderr, но это - стандартная погрешность оболочки, не стандартная погрешность программы. Оболочка печатает это сообщение, когда это обнаруживает, что программа завершилась из-за сигнала.

Можно заставить сообщение замолчать путем перенаправления stderr вокруг части сценария оболочки, который запускает программу:

{ ./code; } >&log
21
27.01.2020, 19:46

Теги

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