Что я просто уничтожал?

Я вижу три решения использовать .last_dir. Можно поместить echo $PWD > ~/.last_dir также:

  1. В специальной функции, которая была бы оберткой для cd:

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    Поместите это в Ваш ~/.bashrc и затем используйте cd_ вместо CD каждый раз Вы хотите, чтобы Ваш новый рабочий каталог был сохранен.

  2. В Вашем $PROMPT_COMMAND (не рекомендуемый):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"
    

    Можно протестировать это непосредственно от терминала или поместить его в ~/.bashrc. Это решение, однако, инициировало запись на диск каждый раз, когда подсказка появляется, который мог бы доставить неприятности - но с другой стороны, .last_dir содержал бы текущий каталог, неважно, как Вы добрались там.

  3. В пользовательском сценарии расширения жемчуга для rxvt. Я никогда не создавал тот сам, но можно найти довольно много примеров в сети.

6
25.01.2013, 16:00
3 ответа

Нет никакого общего способа знать, но у Вас могут быть подсказки.

Вы отправили сигнал ТЕРМИНА, не Сигнал уничтожения, так, чтобы оставленный программу возможность выполнить обработчик сигналов. Это, возможно, не умерло вообще, или это, возможно, оставило запись в журнале где-нибудь. Проверьте, работает ли процесс все еще (ps 2302), и в противном случае проверьте свои системные журналы.

Существует журнал всех процессов, если у Вас есть включенный учет процесса. Это доступно на Linux через GNU acct, но с большинством дистрибутивов пакет не установлен по умолчанию. Если учет процесса включен, работать lastcomm (Вы, возможно, должны быть корнем) видеть недавно уничтоженные процессы (последний первый). С lastcomm, только название команды прослежено, не PID или аргументы; необходимо будет выяснить, какой процесс это обстоятельным соответствием. В соответствии с Linux, lastcomm показывает дате процесс, из которого выходят, но только с гранулярностью 1 минуты, и существует X флаг после названия команды, если команда была уничтожена сигналом.

GNU acct отслеживает больше информации, включая идентификатор процесса, но lastcomm команда не отображает его: необходимо работать dump-acct, который, к сожалению, не указывает, была ли команда уничтожена сигналом.

dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / *2302($| )/'

Существуют другие подсистемы, которые могут зарегистрировать процессы, такие как аудит Linux, но они обычно не настраиваются, чтобы сделать так.

8
27.01.2020, 20:22
  • 1
    Спасибо, Gilles. Этот ответ показывает, как настроить систему, чтобы на самом деле предоставить необходимую информацию. –  dotancohen 26.01.2013, 19:19
  • 2
    Отметьте это process accounting, обычно называемый BSD process accounting доступно на многих Нельдах, не только Linux. Учет (вход) сделан ядром, GNU acct или независимо от того, что инструмент используется для парсинга сгенерированных файлов ядра, не отслеживает информацию (ядро делает) –  Stéphane Chazelas 26.01.2013, 23:03

Нет никакого категорического пути, если Вы не использовали что-то для входа каждого процесса, порожденного в систему (как учет аудита или процесса).

Теперь, вещи можно хотеть попробовать:

  • Тот процесс мог бы регистрировать вещь (с помощью системного журнала или другого) включая его pid, таким образом, Вы могли сделать a zgrep -w 2302 /var/log/**/*(.m-1) (zsh синтаксис), чтобы попытаться определить его.
  • Это или его родитель, возможно, зарегистрировали что-то для создания отчетов о смерти того процесса, Вы могли посмотреть на файлы, которые были изменены начиная с уничтожения, чтобы видеть, содержат ли они какую-либо подсказку (взгляд на .xsession-errors из каждого графически вошел в систему, пользователь, в/var/log снова, смотрит на lsof -nP вывод, чтобы видеть, существует ли некоторая запись, бывшая похожая на файлы журнала в настоящее время, открывается...)...
  • Если не слишком много процессов порождаются на той машине, смотрят на pids близко к 2 302 и их время начала. 2302, возможно, был родитель или ребенок их, или быть связанным команды, он мог бы дать признак того, какой пользователь, вероятно, породил его...
  • в случае, если это было порождено в терминале некоторого пользователя, Вы могли посмотреть если любое время изменения любого оконечного устройства в /dev соответствует времени уничтожения, которое могло помочь Вам снова сузить свой поиск...
4
27.01.2020, 20:22
  • 1
    хорошие подсказки. Я добавил бы: если бы это был демон, то это могло бы все еще иметь свой изодромный с предварением файл под/var/run (в зависимости от обработки уничтожения. 'уничтожьте-9', например, не оставил бы это временем для взятия его изодромного с предварением файла. Не уверенный в "уничтожении" здесь, зависит от того, как демон [если это было одно] прерывание, или не захватывает, это.) –  Olivier Dulac 25.01.2013, 18:56
  • 2
    некоторый PS позволяет структурный вид (или команда pstree), помогая в выяснении, кто родитель этого или того процесса. В Вашем случае однако только помогло бы, сделал ли тот процесс, чтобы "сестра" обработала с подобным числом и тем же родителем... довольно вряд ли –  Olivier Dulac 25.01.2013, 18:58

Нет, нет. Не впоследствии, который является.

Но если бы Вы делаете "PS-A> перечисляет" перед уничтожать-командой, у Вас был бы файл названным списком, который содержит список всех процессов, которые работали прежде, чем уничтожить тот процесс.

3
27.01.2020, 20:22

Теги

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