Извиняюсь, написал, не подумав. Разумеется, не 0, а 1, т.к. сам Фар тоже процесс.
John Doe wrote: Если там есть процесс фара - значит в нём зависание
Всё так, он и висит, голубчик. Буду разбираться. Результаты напишу.
Зависание при закрытии (выходе через F10)
Posted: Wed 01 Jun, 2016 22:07
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'ам?
Зависание при закрытии (выходе через F10)
Posted: Thu 02 Jun, 2016 08:51
by John Doe
HaRT wrote: Предлагаю сделать код вывода в ExitFAR более лаконичным:
Ок
HaRT wrote: сложно ли в макросе вместо меню с PID'ами показать меню Task List
При выходе проблематично, а в макросе можно вызвать через postmacro Task List, пройтись в цикле по пунктам и скрыть ненужные.
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()
Зависание при закрытии (выходе через F10)
Posted: Thu 02 Jun, 2016 23:05
by HaRT
John Doe wrote: добавить к скрипту следующий макрос
Спасибо, здорово, но почему-то у меня ни один Notepad, запущенный через start /b cmd /c Notepad.exe, в меню не выделяется (выделяется только сам Фар). И это при том, что в списке первым макросом они все выводятся. 01:08 MSK
Ха, PIDы-то разные:
Т.е. похоже, к консоли прицеплены какие-то процессы–трамплины, а не сами Блокноты.
PS
А ф-ю я переименовал в getConsoleProcessPIDs (последняя буква строчная).
Зависание при закрытии (выходе через F10)
Posted: Fri 03 Jun, 2016 00:26
by John Doe
HaRT wrote: Т.е. похоже, к консоли прицеплены какие-то процессы–трамплины, а не сами Блокноты.
Это cmd.exe
Значит фаровский Task list тут безполезен..
Зависание при закрытии (выходе через F10)
Posted: Fri 03 Jun, 2016 08:30
by Karagy
На заметку: установленый (просто инсталлированый, не включеный) в системе WideCap (это socksifier, с глобальным хуком на winsock, емнип) приводит к незавершению Outlook 2003. Окно скрывается, но процесс аутлука не может завершиться сам. Это я к тому, что причины незавершения фара или иного (неочевидного) владельца консоли - могут быть очень даже разные у разных пользователей. Вирусы, антивирусы, анонимайзеры и прочие "ускорители интернета" - всё это может быть причиной "зависания при закрытии".
local function MessageText(pids)
local handle = io.popen('TaskList.exe | gawk.exe "$2 ~ /^('..table.concat(pids,'|')..')$/"')
local output = handle:read("*all")
handle:close()
return output,#pids..' console processes detected'
end
и использую эту ф-ю и в обработчике ExitFAR, и в макросе). 15:41 MSK
Использую так:
avast No Context Menu avast! Shell Extension 11.1.2253.1653 Avast Antivirus AVAST Software No No No No No No {472083B0-C522-11CF-8763-00608CC02F24} 2016-02-06 17:22:24 2014-07-10 15:31:10 No *, AllFilesystemObjects, Folder, opensearchfilefolderresult A 770 088 No No C:\Program Files\AVAST Software\Avast\ashShell.dll
Итак, повторюсь, у меня зависает на выходе из процесса far.exe, если при неотрубленном расширении от avast! через EMenu было вызвано (и сразу закрыто) Контекстное меню Проводника.
ntdll.dll!_NtWaitForSingleObject@12() Unknown
ntdll.dll!RtlpWaitOnCriticalSection() Unknown
ntdll.dll!RtlpEnterCriticalSectionContended() Unknown
ntdll.dll!_RtlEnterCriticalSection@4() Unknown
ntdll.dll!LdrpAcquireLoaderLock() Unknown
ntdll.dll!LdrpDecrementNodeLoadCount() Unknown
ntdll.dll!LdrUnloadDll() Unknown
KernelBase.dll!_FreeLibrary@4() Unknown
Far.exe!native_plugin_factory::Destroy(void * instance=0x036e1830) Line 168 C++
Far.exe!Plugin::Unload(bool bExitFAR=true) Line 714 C++
Far.exe!std::_For_each<std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tree_simple_types<Plugin *> >,std::_Iterator_base0>,<lambda_49de9b42ae6e424712d686151541d69f> >(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tree_simple_types<Plugin *> >,std::_Iterator_base0> _First={...}, std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tree_simple_types<Plugin *> >,std::_Iterator_base0> _Last={...}, PluginManager::{dtor}::__l2::<lambda_49de9b42ae6e424712d686151541d69f> & _Func={...}) Line 23 C++
Far.exe!PluginManager::~PluginManager() Line 160 C++
Far.exe!ControlObject::~ControlObject() Line 138 C++
Far.exe!mainImpl::__l2::<lambda>() Line 740 C++
Far.exe!mainImpl(const range<wchar_t * *> & Args={...}) Line 798 C++
Far.exe!wmain(int Argc=2, wchar_t * * Argv=0x00dce848) Line 818 C++
Far.exe!__scrt_common_main_seh() Line 264 C++
kernel32.dll!@BaseThreadInitThunk@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
ntdll.dll!__RtlUserThreadStart@8() Unknown
(без прочих плагинов) FreeLibrary вызывается для EMenu.dll.
Зависание при закрытии
Posted: Wed 18 Aug, 2021 05:08
by LizardKing
Доброго времени суток.
Редко-редко и весьма случайно проявляется неприятная вещь: при закрытии Фара (корректного, по F10, и отнюдь не после какой-то там интенсивной нагрузки) гаснут панельки - и бесконечно висит чёрная консоль с "Far Manager, version блаблабла". Происходит раз на раз, спокойно снимается Диспетчером задач, с каким-то конкретным билдом, насколько вижу, не связано.
В чём может быть причина, не подскажете?
Зависание при закрытии
Posted: Wed 18 Aug, 2021 07:13
by Yegor
Возможно плагин какой...
Что можно сделать:
1) Взять последнюю версию с github-а, а так же взять pdb-шники
2) Воспроизвести проблему
3) Взять Process Explorer (от sysinternals) и посмотреть какие потоки висят и их call stack-и
3) И/или сделать дамп/минидамп и выложить на "посмотреть"
Зависание при закрытии (выходе через F10)
Posted: Wed 18 Aug, 2021 08:19
by Taciturn
У меня было такое из-за повреждённой базы %FARLOCALPROFILE%\history.db. Исправил через
. Остальные базы тоже проверял, с ними проблем не было.
Зависание при закрытии (выходе через F10)
Posted: Wed 18 Aug, 2021 10:08
by LizardKing
А ведь и вправду в этом единственном db-файле куча missing rows... которые успешно исправляются, но снова появляются после любой операции с любой Фаровской историей. Такшта, видимо, не вариант, увы.
Зависание при закрытии (выходе через F10)
Posted: Wed 18 Aug, 2021 10:38
by Shmuel
LizardKing, я проверил у себя файл истории, там было 2 ошибки, связанные с таблицей editorposition_history.
Поскольку это не самая критичная история, я удалил эту таблицу полностью и перезапустил Фар.
Погулял редактором по разным файлам, меняя позиции в них - пока ошибка не возвращается.
Зависание при закрытии (выходе через F10)
Posted: Wed 18 Aug, 2021 10:42
by LizardKing
Gut коли так. Тоже добился отсутствия повторного возникновения ошибок, будем посмотреть. Мож, реально из-за этого висняк.
P.S. А ошибок-то было далеко не две, а много за ДВЕ СОТНИ