Зависание при закрытии (выходе через F10)

Здесь можно сообщить о найденных багах в Far.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Зависание при закрытии (выходе через F10)

Post by 2useven10 »

Latest post of the previous page:

sToLp wrote: есть ещё относящийся к Фару процесс, не указанный в сообщении, PID 4508 — conemu64.exe.
Это чисто гуёвый процесс. Он в GetConsoleProcessList отображаться не должен.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

John Doe wrote: Печатается вверху экрана.
Да, если есть процессы как таковые, то печатается.
Но у меня ситуация другая: я добавил туда . Так вот если я вызвал и сразу закрыл Контекстное меню Проводника и после этого пытаюсь выйти из Фара, то наблюдаю пустую консоль, без какого бы то ни было текста в ней. Это наводит на мысль, что обработчик ExitFAR даже не получает управления, а зависание происходит где-то раньше. Надо будет подцепиться отладчиком и посмотреть…
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Зависание при закрытии (выходе через F10)

Post by John Doe »

HaRT wrote: а зависание происходит где-то раньше.
В этом можно убедиться просто открыв Диспетчер Задач (или как это сейчас называется).
Если там есть процесс фара - значит в нём зависание, если я правильно понимаю.
HaRT wrote: Просто у меня ListLength==0.
Так не бывает, значит функция отработала с ошибкой, что предусмотрено скриптом (должно быть сообщение об ошибке)
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

John Doe wrote: Так не бывает
Извиняюсь, написал, не подумав. Разумеется, не 0, а 1, т.к. сам Фар тоже процесс.
John Doe wrote: Если там есть процесс фара - значит в нём зависание
Всё так, он и висит, голубчик. Буду разбираться. Результаты напишу.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

John Doe wrote: CODE: [ВЫДЕЛИТЬ ВСЁ] [EXPAND/COLLAPSE] [DOWNLOAD] (GETCONSOLEPROCESSLIST.LUA)
Предлагаю сделать код вывода в ExitFAR более лаконичным:
io.write("Warning: ",ListLength," console processes detected\n","PIDs: ",table.concat(pids,' '))

И вот интересно: сложно ли в макросе вместо меню с PID'ами показать меню Task List ([b]CtrlW[/b]), отфильтрованное по этим PID'ам?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Зависание при закрытии (выходе через F10)

Post by John Doe »

HaRT wrote: Предлагаю сделать код вывода в ExitFAR более лаконичным:
Ок
HaRT wrote: сложно ли в макросе вместо меню с PID'ами показать меню Task List
При выходе проблематично, а в макросе можно вызвать через postmacro Task List, пройтись в цикле по пунктам и скрыть ненужные.

Или же можно просто по pid получить имена (OpenProcess + GetModuleFileNameEx|GetModuleBaseName|GetProcessImageFileName + CloseHandle).
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Зависание при закрытии (выходе через F10)

Post by John Doe »

HaRT wrote: показать меню Task List (CtrlW), отфильтрованное по этим PID'ам?
добавить к скрипту следующий макрос:

Code: Select all

local F = far.Flags
Macro { description="check console processes in Task list";
  area="Common"; key="CtrlW";
  uid="1CACFB07-B3FA-483D-BC65-9AB8C86F73FC";
  action=function()
    Keys"CtrlW"
    local ListLength,pids = getConsoleProcessPIDS()
    if ListLength>1 then mf.beep() end
    local hDlg,ID = far.AdvControl(F.ACTL_GETWINDOWINFO).Id,1
    local list = far.GetDlgItem(hDlg, ID)[6] --[6]  Selected/ListItems: integer/table
    local item
    for i=#list,1,-1 do
      item = list[i]; local pid = tonumber(item.Text:match"%d+")
      for j=1,#pids do
        if pids[j]==pid then
          hDlg:send(F.DM_LISTUPDATE, ID,{Index=i,Text=item.Text,Flags=bor(item.Flags,F.LIF_CHECKED)})
        end
      end
    end
  end;
}
Срабатывает на CtrlW, показывая стандартный список задач, в котором искомые процессы помечены галками.
Если процессов>1, то вызывается mf.beep()
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

John Doe wrote: добавить к скрипту следующий макрос
Спасибо, здорово, но почему-то у меня ни один Notepad, запущенный через start /b cmd /c Notepad.exe, в меню не выделяется (выделяется только сам Фар). И это при том, что в списке первым макросом они все выводятся.
01:08 MSK
Ха, PIDы-то разные:

Code: Select all

11892 │ Untitled - Notepad
12896 │ Untitled - Notepad

Code: Select all

Warning: 3 console processes detected
PIDs: 6340 11504 14308
Т.е. похоже, к консоли прицеплены какие-то процессы–трамплины, а не сами Блокноты.

PS
А ф-ю я переименовал в getConsoleProcessPIDs (последняя буква строчная).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Зависание при закрытии (выходе через F10)

Post by John Doe »

HaRT wrote: Т.е. похоже, к консоли прицеплены какие-то процессы–трамплины, а не сами Блокноты.
Это cmd.exe
Значит фаровский Task list тут безполезен..
Karagy
Posts: 57
Joined: Tue 02 May, 2006 08:43
Location: Питер
Been thanked: 3 times

Зависание при закрытии (выходе через F10)

Post by Karagy »

На заметку: установленый (просто инсталлированый, не включеный) в системе WideCap (это socksifier, с глобальным хуком на winsock, емнип) приводит к незавершению Outlook 2003. Окно скрывается, но процесс аутлука не может завершиться сам. Это я к тому, что причины незавершения фара или иного (неочевидного) владельца консоли - могут быть очень даже разные у разных пользователей. Вирусы, антивирусы, анонимайзеры и прочие "ускорители интернета" - всё это может быть причиной "зависания при закрытии".
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

John Doe wrote: Это cmd.exe
Я себе сделал и использую эту ф-ю и в обработчике ExitFAR, и в макросе).
15:41 MSK
Использую так: ,
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Исправлен фильтр процессов; разделены заголовок и список.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

Зависание при закрытии (выходе через F10)

Post by Vertigo »

HaRT wrote:Я себе сделал дёшево и сердито
Я думаю, в гавке паттерн стоит обрамить в ^(...)$ для точного соответствия. Иначе ищется по подстроке. Ошибка маловероятна, но возможна.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Зависание при закрытии (выходе через F10)

Post by HaRT »

HaRT wrote:
HaRT wrote: В каком точно, я не знаю
С помощью ShExView виновник установлен — им оказался
Итак, повторюсь, у меня зависает на выходе из процесса far.exe, если при неотрубленном расширении от avast! через EMenu было вызвано (и сразу закрыто) Контекстное меню Проводника. (без прочих плагинов)
FreeLibrary вызывается для EMenu.dll.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
LizardKing
Posts: 23
Joined: Tue 07 May, 2019 22:21
Has thanked: 26 times
Been thanked: 2 times

Зависание при закрытии

Post by LizardKing »

Доброго времени суток.
Редко-редко и весьма случайно проявляется неприятная вещь: при закрытии Фара (корректного, по F10, и отнюдь не после какой-то там интенсивной нагрузки) гаснут панельки - и бесконечно висит чёрная консоль с "Far Manager, version блаблабла". Происходит раз на раз, спокойно снимается Диспетчером задач, с каким-то конкретным билдом, насколько вижу, не связано.
В чём может быть причина, не подскажете?
The Show Must Go On!
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Зависание при закрытии

Post by Yegor »

Возможно плагин какой...

Что можно сделать:
1) Взять последнюю версию с github-а, а так же взять pdb-шники
2) Воспроизвести проблему
3) Взять Process Explorer (от sysinternals) и посмотреть какие потоки висят и их call stack-и
3) И/или сделать дамп/минидамп и выложить на "посмотреть"
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
Taciturn
Posts: 600
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 89 times
Been thanked: 31 times
Contact:

Зависание при закрытии (выходе через F10)

Post by Taciturn »

У меня было такое из-за повреждённой базы %FARLOCALPROFILE%\history.db. Исправил через

Code: Select all

sqlite3 history.db ".recover" | sqlite3 history_.db
, заменив повреждённый файл результатом .recover. Предварительно проверил на ошибки,

Code: Select all

sqlite3 history.db "PRAGMA integrity_check"
. Остальные базы тоже проверял, с ними проблем не было.
Post Reply

Return to “Глюки и баги”