Вопросы с тегами [process]

1

голосов
2

ответ
3.4k

Просмотры

Процесс не может получить доступ к файлу, так как он используется другим процессом. Дженкинс Сложение

Когда мы прервать один из Дженкинс Работы сборок работают на окна ведомого, а затем попытаться RETRIGGER, что новая запускаются сборка завершается с ошибкой ниже: Процесс не может получить доступ к файлу, так как он используется другим процесс. При удалении рабочей области.
Anurag Sharma
1

голосов
1

ответ
326

Просмотры

Как убить дочерний процесс НПМ

У меня есть package.json, на котором я определяю отладки сценария. Этот скрипт запускает приложение узла. Весь НПМ скрипт запускается с помощью теста, и этот последний должен убить скрипт отладки, как только тест заканчивается. Поэтому, когда я икра НОЙ запустить отладку и я убью его, процесс узла не убит. Я пытался либо убить весь процесс с child_process.kill и порождая команду убить Баш не повезло, так как ИДП не принадлежит к узлу запущенного с помощью NPM выполнения отладки. Как убить этот процесс узла, для которого я не являюсь его PID?
Matías Fidemraizer
1

голосов
1

ответ
458

Просмотры

Как присоединить OllyDbg к скрытому процессу?

Я пытаюсь декомпилировать программу, которая требует серийного ключа для запуска. Проблема заключается в том, что, когда я хочу, чтобы присоединить OllyDbg к программе, этот процесс в принципе не подходит. Когда я открыл диспетчер задач, чтобы попытаться найти процесс, я мог бы легко найти его. Может кто-нибудь объяснить, почему это происходит, и как это обойти?
Lukas Knudsen
1

голосов
1

ответ
278

Просмотры

Есть ли `Трассирование -f` работают по-разному при запуске внутри Docker контейнера?

Предположим следующее: У меня есть программа MyProgram внутри контейнера Docker я бегу контейнер Docker с Docker перспективе --privileged = правда моя метка / мой-контейнер Внутри контейнера - программа бежится с: Трассирование -f - е след = убывание ./myprogram То, что я вижу, что Трассирование (несмотря на наличие -f на) не следует всем дочерним процессам. Я вижу следующий вывод из Трассирования [PID 10] 07: 36: 46,668931 запись (2, ".. \ п" ..., 454
hawkeye
1

голосов
1

ответ
71

Просмотры

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

Ниже мой код, написанный для выполнения сценария под названием mqValidation.sh в UNIX, отправив запрос AJAX. Это порождает новый дочерний процесс и при выходе из дочернего процесса, он посылает ответ текстового файла, который, очевидно, содержит вывод скрипта. Но этот вопрос я столкнулся здесь, так как сценарий занимает много времени, чтобы закончить, новый дочерний процесс идет порождал до первых выходов дочернего процесса, который означает, что сценарий становится выполняется снова. вар экспресс = требуется ( «экспресс»); вар приложение = экспресс (); вар р = требуется ( 'child_process'); app.post ( '/ triggerMQ', функция (REQ, разреш) {Ls = cp.spawn ( './ mqValidation.sh', req.body.envs, {CWD: "./ MQValidation"}); ls.stdout .он ( 'данные', (данные) => {console.log ( `стандартный вывод: $ {данные}`);}); ls.stderr.on ( 'данные', (данные) => {консоли. LOG ( `STDERR: $ {данные}`); }); ls.on ( 'Выход', (код) => {console.log ( "дочерний процесс завершился"); res.sendFile (__ имя_директории + '/ MQValidation / html.txt');}); }); app.listen (8000, функция () {console.log ( "приложение слушает на порту 8000 .....");}); Пожалуйста помоги!!
koteswar
1

голосов
0

ответ
296

Просмотры

Узел-JS - Экспресс и child_process захватывая выход

Мне интересно, если есть способ для меня, чтобы иметь экспресс-запросы сервера Дескриптор процесса child_process. Например, я хочу, чтобы иметь возможность отправить команду, например, cmd.exe, и получить ответ испускать клиент делает запрос. Благодарю. EDIT: Как я пробовал до сих пор есть: нерест child_process через вар прок = мицелия (CONFIG.CMD, config.args, {УХО: config.cwd}); И затем конвейер выхода через: proc.stdout.on ( 'данные', функции (данные) {res.send (данные)}); Однако, это не на самом деле возвращает данные из-за его возвращения команды, которая была послана. Мне было интересно, если есть функция обещания, как:. Proc.stdin.write ( «команда»), то это процесс, который не заканчивается после того, как команда, она будет продолжать работать. Так что я просто не могу ждать, пока все ответы. Благодарю.
Tyler Wilson
1

голосов
0

ответ
114

Просмотры

Как продолжить, когда Python в PyCharm выполняет процесс командной строки ожидания на паузу

Я использую PyCharm отладить кусок кода Python. Код питона выполняет исполняемый файл командной строки, которую мы написали. Программа еха сначала приостановлена, потому что она ждет от нажатия клавиши, так что мы можем прикрепить процесс отладки цели. При запуске в окне CMD, мы можем видеть сообщение и нажмите любую клавишу для продолжения. Однако, в PyCharm, я не видел послание ожидания, и не знаю, как позволить продолжить процесс. Есть ли где в PyCharm взаимодействовать с процессом C начался в Python?
Splash
1

голосов
0

ответ
27

Просмотры

Endless loop when restarting program with different parameters using Process.Start

I rewrote a WinForms program to also be accessable and runnable via command line. On my Win10 machine everything works fine. Double clicking the executable runs the windowed version and calling it from the command line runs the command line version. Moreover I can explicitly set an option to ensure window or command line mode independent on how the executable was called. The project is set as console application. To start the GUI version I close the console application and restart it without a console window. The following code is the point where I do this. Private Shared Function GetConsoleWindow() As IntPtr End Function ''' ''' Init as GUI application by restarting. ''' This might be a little hacky, but there is no other way since otherwise command line input is not working properly. ''' (I tried a lot variatons of attaching to the current cmd, etc.) ''' Private Sub InitUI() Dim consoleHandle As IntPtr = GetConsoleWindow() If _configuration.IsGUIApplication And consoleHandle IntPtr.Zero Then '' Restart without console, if it's a GUI application Dim binaryPath As String = Assembly.GetEntryAssembly().Location Dim processInfo As ProcessStartInfo = New ProcessStartInfo(binaryPath) With { .CreateNoWindow = True, .UseShellExecute = False, .Arguments = Environment.CommandLine, .WorkingDirectory = Path.GetDirectoryName(binaryPath) } Process.Start(processInfo) '' End current console process Environment.Exit(0) End If End Sub The problem, that I now have is that this doesn't work on Windows Server 2008. If I start the application by double clicking nothing seems to happen. Looking into the TaskManager the program seems to call itself again and again, since the execution call is something like Program.exe Program.exe, Program.exe Program.exe ... I assume that the consoleHandle is never IntPtr.Zeroand therefore it's restarting and restarting and restarting. I cannot debug on the Windows Server 2008, but I might add log messages to the program in doubt. I tried some googling, but with no success right know. EDIT My next step is to check whether the issue still happens, if avoid closing the current console application. In that case the window application should open and the console should run as background process. => I tried that now and it works. Nevertheless I would like to close the console application in the background such that only the window application is visible. EDIT 2 Just added some log messages and my assumption is true: The consoleHandle gets a new value on every restart and is never IntPtr.Zero Does anyone have an idea? SOLUTION I did not find the reason why Windows Server 2008 handles the issue differently than Win10. They way I solved it was to hide the console window instead of restarting the instance. I'm okay with that solution, but it means that I can't start the application from within a console without having the necessity to keep the console window open. Private Shared Function GetConsoleWindow() As IntPtr End Function Private Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean End Function Private Const SW_HIDE As Integer = 0 ''' ''' Returns whether the program was called from a console or not. ''' ''' Private Function IsCalledFromConsole() As Boolean Dim left = Console.CursorLeft Dim top = Console.CursorTop Return Not (left = 0 AndAlso top = 0) End Function ''' ''' Init as GUI application by hiding the console window. ''' This might be a little hacky, but there is no other way since otherwise command line input is not working properly. ''' (I tried a lot variatons of attaching to the current cmd, etc.!) ''' Private Sub InitUI() Dim consoleHandle As IntPtr = GetConsoleWindow() If _configuration.IsGUIApplication And consoleHandle IntPtr.Zero And Not IsCalledFromConsole() Then ShowWindow(consoleHandle, SW_HIDE) End If End Sub
Paul
1

голосов
1

ответ
134

Просмотры

How to test an instance counter by asynchronous run of a boost childprocess?

Я пытался использовать повышение :: childprocess с async_pipe, как показано в примере кода, в то время как ожидали, так как есть метод ждать, что вызов для запуска не будет ждать, пока вызываемый исполняемый файл, чтобы закончить перед продолжением линии, где я ожидание вызова (). Моя цель состоит в том, чтобы начать именно те же исполняемые несколько раз, чтобы проверить в GTEST метод экземпляра подсчета (реализовано на основе повышающего управляемый разделяемого сегмента памяти). Но вот носовой мне нужен вызов io_service :: Run (), чтобы не ждать, пока вызываемый исполняемый файл, чтобы закончить, как это делает сейчас. Может кто-нибудь сказать мне, где я использую это неправильно, пожалуйста? Или, если это неправильный путь к блоку проверить свою функцию? Я пытался найти решение в течение достаточно долгого времени! Вот пример того, как я называю один экземпляр исполняемого файла: INT CallChildProcess_Style9 () {станд :: строка strCmdLine = «E: m_oAsyncPipe_Out.close (); m_oIOS.reset (); возвращать результат; }
Chrysmac
1

голосов
0

ответ
462

Просмотры

питон селеном chrome.exe фоновый процесс не убит после того, как бросить курить ()

У меня возникли проблемы в нескольких окнах (7/10) ОС с питона 3.6.3 селена последней версии. После того, как я делаю webdriver.quit () команда основных хромированные окон замкнута, но несколько chrome.exe процесса Б.Г. нет. У меня есть питон планировщик повторно метод открытия хромо WebDriver и закрыть его ... через несколько дней память полна chrome.exe процесс в BG. Более подробная информация: когда я ушел из питона планировщика всего процесс хрома Б.Г. исчез. Пробовал отключить «Продолжать работу приложений в фоновом режиме Google Chrome закрыт» режим отключили песочницу вместо вызова метода я запустить веб-драйвер каждый раз по подпроцессу не происходит на все машины. Как я могу убедиться, что все подпроцесс мертвы, прежде чем Я повторно мой код: график импорта импорта подпроцесс импорта четкости сна работы (): команда = [ «питона», «chromeStartQuit.py»
Sion C
1

голосов
0

ответ
111

Просмотры

Изящно закрыть программно запущен консольное приложение

Я работаю на простой пользовательский интерфейс для ccminer. В рамках моего запуска / остановки я использую что-то вроде этого, чтобы запустить ccminer.exe: ProcessStartInfo инфо = новый ProcessStartInfo (); info.FileName = «ccminer.exe» info.Arguments = "старт"; info.UseShellExecute = FALSE; info.CreateNoWindow = TRUE; Process.Start (информация); Когда мне нужно, чтобы остановить его, я просто называю убить (). Теперь проблема в том, что этот путь, половину времени приложение консоли разбивает мой видеодрайвер и не грациозно выключение. Если бы я был бежать ccminer как консольное приложение, я бы ударил CTRL + C, а затем она будет просить что-то вроде: «Прекратить, Y / N?» И после получения подтверждения - грациозно остановить без сбоев видеодрайвер. Есть ли способ, что я могу программно имитировать это изящное отключение CTRL + C без просто убиваю мой процесс?
eYe
1

голосов
0

ответ
43

Просмотры

Wait for an executable to finish with a cancellation support

I'd like to wait for an executable to finish but supporting a cancellation token at the same time. Most of the answers on SO suggest using process.WaitForExit but that does not support a cancellation token. What would be the best reliable way to go about this? Below is my attempt using wait handles: void Main() { using (CancellationTokenSource cts = new CancellationTokenSource(/*1000*/)) { string output = RunAndGetOutput("netstat", null, cts.Token.WaitHandle); if (output == null) Console.WriteLine("Error"); else if (output.Length == 0) Console.WriteLine("Didn't read anything..!"); else Console.WriteLine(output); } } string RunAndGetOutput(string execName, string arguments, WaitHandle waitableHandle) { using (Process process = new Process { StartInfo = new ProcessStartInfo { FileName = execName, Arguments = arguments ?? string.Empty, UseShellExecute = false, WorkingDirectory = Directory.GetCurrentDirectory(), CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8, StandardErrorEncoding = Encoding.UTF8, RedirectStandardOutput = true, RedirectStandardError = true } }) { bool processReallyExited = false; StringBuilder sb = new StringBuilder(1024); process.OutputDataReceived += (sender, args) => { if (args.Data == null) return; sb.AppendLine(args.Data); }; process.ErrorDataReceived += (sender, args) => { if (args.Data == null) return; sb.AppendLine(args.Data); }; process.Exited += (sender, args) => processReallyExited = true; try { bool result = process.Start(); if (!result) return null; process.BeginOutputReadLine(); process.BeginErrorReadLine(); if (!IsWaitable(waitableHandle)) { // If a wait handle was passed but is closed, then don't wait if (IsClosed(waitableHandle)) return null; process.WaitForExit(); return sb.ToString(); } SafeWaitHandle waitHandle = null; ManualResetEvent processFinishedEvent = null; try { waitHandle = new SafeWaitHandle(process.Handle, false); processFinishedEvent = new ManualResetEvent(false) { SafeWaitHandle = waitHandle }; WaitHandle[] waitHandles = { processFinishedEvent, waitableHandle }; // delay the operation to test timeout // Thread.Sleep(1000); int ndx = WaitHandle.WaitAny(waitHandles); if (ndx != 0) return null; if (!processReallyExited && !process.HasExited) { // Process didn't raise exit event! Make another attempt to wait for 0.5 second if (!process.WaitForExit(500)) ndx = -1; } return ndx != 0 ? null : sb.ToString(); } finally { processFinishedEvent?.Dispose(); processFinishedEvent = null; waitHandle?.Dispose(); waitHandle = null; } } catch (Win32Exception e) { throw new InvalidOperationException(e.Message, e); } } } bool IsWaitable(WaitHandle waitHandle) { return waitHandle != null && waitHandle.SafeWaitHandle != null && !waitHandle.SafeWaitHandle.IsInvalid && !waitHandle.SafeWaitHandle.IsClosed; } bool IsClosed(WaitHandle waitHandle) { return waitHandle != null && waitHandle.SafeWaitHandle != null && waitHandle.SafeWaitHandle.IsClosed; } Would this be a reliable way? ** I intend to use this with multi-threads. Edit 1: Is using wait handles a reliable way? because if I used another command, for example, "cmd" and an argument like "/C dir", sometimes I don't get output although it was not timed out! It seems as if the executable has already exited before catching the wait handle or something. Edit 2: I think to demonstrate the problem better, threads must be involved in this code. So, I prepared an example with threads as simple as it gets with sample outputs. I applologize if it's too long void Main() { using (CancellationTokenSource cts = new CancellationTokenSource(/*1000*/)) { int n = 0; Thread[] threads = new Thread[Environment.ProcessorCount]; for (int i = 0; i < threads.Length; i++) { (threads[i] = new Thread(() => { string output = RunAndGetOutput("cmd", "/C dir", cts.Token.WaitHandle); Interlocked.Add(ref n, 1); if (output == null) Console.WriteLine($"Task {n}:\nError"); else if (output.Length == 0) Console.WriteLine($"Task {n}:\nDidn't read anything..!"); else Console.WriteLine($"Task {n}:\n" + output); })).Start(); } // block until all threads finish foreach (Thread thread in threads) { thread.Join(); } } } static string RunAndGetOutput(string execName, string arguments, WaitHandle waitableHandle) { using (Process process = new Process { StartInfo = new ProcessStartInfo { FileName = execName, Arguments = arguments ?? string.Empty, UseShellExecute = false, WorkingDirectory = Directory.GetCurrentDirectory(), CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8, StandardErrorEncoding = Encoding.UTF8, RedirectStandardOutput = true, RedirectStandardError = true } }) { bool processReallyExited = false; StringBuilder sb = new StringBuilder(1024); process.OutputDataReceived += (sender, args) => { if (args.Data == null) return; sb.AppendLine(args.Data); }; process.ErrorDataReceived += (sender, args) => { if (args.Data == null) return; sb.AppendLine(args.Data); }; process.Exited += (sender, args) => processReallyExited = true; try { bool result = process.Start(); if (!result) return null; process.BeginOutputReadLine(); process.BeginErrorReadLine(); if (!IsWaitable(waitableHandle)) { // If a wait handle was passed but is closed, then don't wait if (IsClosed(waitableHandle)) return null; process.WaitForExit(); return sb.ToString(); } SafeWaitHandle waitHandle = null; ManualResetEvent processFinishedEvent = null; try { waitHandle = new SafeWaitHandle(process.Handle, false); processFinishedEvent = new ManualResetEvent(false) { SafeWaitHandle = waitHandle }; WaitHandle[] waitHandles = { processFinishedEvent, waitableHandle }; // delay the operation to test timeout // Thread.Sleep(1000); int ndx = WaitHandle.WaitAny(waitHandles); if (ndx != 0) return null; if (!processReallyExited && !process.HasExited) { // Process didn't raise exit event! Make another attempt to wait for 0.5 second if (!process.WaitForExit(500)) ndx = -1; } return ndx != 0 ? null : sb.ToString(); } finally { processFinishedEvent?.Dispose(); processFinishedEvent = null; waitHandle?.Dispose(); waitHandle = null; } } catch (Win32Exception e) { throw new InvalidOperationException(e.Message, e); } } } static bool IsWaitable(WaitHandle waitHandle) { return waitHandle != null && waitHandle.SafeWaitHandle != null && !waitHandle.SafeWaitHandle.IsInvalid && !waitHandle.SafeWaitHandle.IsClosed; } static bool IsClosed(WaitHandle waitHandle) { return waitHandle != null && waitHandle.SafeWaitHandle != null && waitHandle.SafeWaitHandle.IsClosed; } The output sometimes doesn't come, other times incomplete and other times I get all the output. This is unreliable though and I'd like to understand why is this happening. Sample output: 1st attempt: Task 1: Didn't read anything..! Task 2: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 3: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 4: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 5: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 6: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 7: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free Task 8: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,095,296 bytes free 2nd attempt: Task 1: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . Task 2: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 3: Didn't read anything..! Task 4: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 5: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 6: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 7: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 8: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free 3rd attempt: Task 1: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Task 2: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . Task 3: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 4: Didn't read anything..! Task 5: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 6: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 7: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free Task 8: Volume in drive C is OS Volume Serial Number is DCFD-FBFC Directory of C:\Program Files\LINQPad 2018-03-02 02:09 PM . 2018-03-02 02:09 PM .. 2018-02-19 03:48 AM 32,099,328 LINQPad.exe 2018-02-19 03:48 AM 2,814 LINQPad.exe.config 2018-02-19 03:48 AM 400 lprun readme.txt 2018-02-19 03:48 AM 11,448 lprun.exe 2018-02-19 03:48 AM 2,814 lprun.exe.config 2018-02-19 04:21 PM 79 Readme.txt 6 File(s) 32,116,883 bytes 2 Dir(s) 56,503,042,048 bytes free
1

голосов
0

ответ
58

Просмотры

Как выполнить команду в Баш, где Баш создается с помощью команды EXEC () в C

Если я хочу, чтобы выполнить команду для LS в Баш, который я создал, используя способ, если (вилка () == 0) {dup2 (FileDescriptor, 1); // перенаправление стандартного вывода ( "эти функции имеют Баш", "Баш", "- L", NULL); }, То как я могу отправить входную сберегательные вновь созданное баш?
Reshmi Das
1

голосов
1

ответ
105

Просмотры

Запись данных на указатель другой программы в C?

Я в настоящее время обучение C, особенно то, как работает память, и как я могу писать и читать данные, используемые программами. Для практики, я начал программировать немного чита для игры Undertale, что бы постоянно перезаписать адрес здоровья с максимальным значением здоровья, которое сделало бы характер непобедимы. Я искал адрес ценности здоровья с Чит Engine, и теперь у меня есть этот код: #include #include INT основной (недействительными) {Е ( «\ п»); двойное = 20 максимального количество здоровья; HWND HWND = FindWindowA (NULL, "UNDERTALE"); если (HWND == NULL) {Е ( "ОШИБКА:.. Не удалось найти окно игры вскройте GAME \ п"); возвращает 1; } Е ( "окно [+] Undertale найдено \ N"); DWORD ProcessId; GetWindowThreadProcessId (HWND, & ProcessId); Ручка Ручка = OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessId); если (ProcessId == NULL) {Е ( "ОШИБКА: МОГ НЕ ОБРАЩАТЬСЯ ПРОЦЕСС \ п."); возвращает 1; } Е ( "[+] Получено ручка \ п"); в то время как (1) {Е ( "[*] значение Дать максимальное здоровье в адрес здоровья .. \ п"); WriteProcessMemory (ручка, (LPVOID) 0x049B2F8, &, максимальное количества здоровья SizeOf () максимальное количество здоровья, 0); Е ( "[+] Готово! \ п"); } Возвращает 0; } И это работает. Плохо то, когда вы закроете игру и вновь открыть его, все адреса разные ... Это не очень эффективно. Поэтому я хотел бы попробовать использовать Чит Engine, чтобы найти базовый адрес ценности здоровья. Я сделал несколько сканов указателей, и сузил результаты примерно 150 адресов, указывающий на адрес здоровья. Я попытался выбрать одну случайно, закрыл игру, вновь открыл ее, и она работала: Я был в состоянии изменить значение здоровья с помощью указателя я нашел. Так я думал, что я хотел бы использовать его в своем коде. Под «Base Address» в окне указателя сканирования, он показал «UNDERTALE.exe» + 059E4F8. Я попытался заменить адрес в моем коде с адресом указателя (я напечатал (LPVOID) 0x059E4F8), но это не сработало. Выход сказал «[+] Готово!» неоднократно, но ценность здоровья не меняюсь, в то время как он работал в Чите Engine ... Я новичок в целом управления памятью вещи, то, что я сделал не так? Это то, что я хочу сделать, возможно? Я надеюсь, что мое объяснение всего, что я сделал было достаточно ясно, если нет, пожалуйста, дайте мне знать. Спасибо. что я сделал не так? Это то, что я хочу сделать, возможно? Я надеюсь, что мое объяснение всего, что я сделал было достаточно ясно, если нет, пожалуйста, дайте мне знать. Спасибо. что я сделал не так? Это то, что я хочу сделать, возможно? Я надеюсь, что мое объяснение всего, что я сделал было достаточно ясно, если нет, пожалуйста, дайте мне знать. Спасибо.
Alpha
1

голосов
0

ответ
55

Просмотры

system.componentmodel.win32exception when trying to run stockfish binary file for android

Я создаю шахматную игру в Unity. Я хочу построить свою игру для Android. Для ИИ я использую вяленой движок и более конкретно «9-arm64v8 Stockfish» файл, который представляет собой двоичный файл для Android. Я создал сценарий # C, который создает процесс для запуска этого двоичного файла и общаться с ним. Когда я пытаюсь начать свой процесс исключения поднимается -> попробуйте {mProcess.Start (); } Задвижка (Исключение е) {Helper.PrintString (e.GetType () ToString ().); // ---------------- (1) Helper.PrintString (e.Message); // -------------- (2)} / * (1) является печать: System.ComponentModel.Win32Exception (2) печать: Имя_приложения = «/ хранение / эмулировать / 0 / Android /data/com.chessmania.chess/files/Stockfish-9- arm64v8' , CommandLine = '', CurrentDirectory = '' * / Кроме того, мои параметры процесса информация являются следующие: ProcessStartInfo си = новый ProcessStartInfo () {имя_файла = System.IO.Path.Combine (Application.persistentDataPath, "Вяленая-9-arm64v8"), UseShellExecute = ложь, CreateNoWindow = верно, RedirectStandardError = верно, RedirectStandardInput = верно, RedirectStandardOutput = истина }; Может кто-нибудь, пожалуйста, помогите мне с этим. Я пытался решить этот вопрос за последние несколько дней, но не смог. Есть ли у него что-то делать с разрешения файла ?? Я имею в виду, я буду включать некоторые аргументы в моих ProcessInfoParameters насильно запустить бинарный файл ?? Я действительно не знаю, если это проблема или что-то еще? Поправьте меня с самого начала, если я не прав. Я просто хочу, чтобы интегрировать вяленой движок с проектом с Unity и построить его для Android платформы. Если у кого есть какие-либо идеи или предложения, или если кто-нибудь имел дело с подобной проблемой раньше, пожалуйста, дайте мне знать, как решить эту проблему. Буду признателен. Спасибо за подшипник со мной, пока здесь :)
Summi
1

голосов
1

ответ
108

Просмотры

Почему msgsnd () и msgrcv () не может работать хорошо?

Msgsnd () и msgrcv () находятся в одной и той же функции, она работает хорошо, как и в первом примере. main.c #include #include #include INT основных (INT ARGC, символ * ARGV []) {pid_t ПИД1; pid_t ПИД2; pid_t PID3; pid_t pid4; если ((ПИД1 = вилка ()) <0) {Е ( "вилка ошибка \ п"); } Еще если (ПИД1 == 0) {Е ( «Я в первый процесс \ п»); INT NodeId = 1; // cmc_init (NodeId); test2 (NodeId); возвращать 0; } Если ((PID2 = вилка ()) <0) {Е ( "вилка ошибка \ п"); } Еще если (ПИД2 == 0) {Е ( «Я нахожусь в процессе второго \ п»); INT NodeId = 2; // cmc_init (NodeId); test2 (NodeId); возвращать 0; } Если ((PID3 = вилка ()) <0) {Е ( "PID3 вилка ошибки \ п"); } Еще если (PID3 == 0) {Е ( "Я в третий процесс \ п"); INT NodeId = 3; // cmc_init (NodeId); test2 (NodeId); возвращать 0; } Если ((pid4 = вилка ()) <0) {Е ( "pid4 вилка ошибки \ п"); } Еще если (pid4 == 0) {Е ( "Я в четвертый процесс \ п"); INT NodeId = 4; // cmc_init (NodeId); // test2 (NodeId); возвращать 0; } Если (waitpid (-1, NULL, 0) <0) {Е ( "wait1 ошибка \ п"); } Сна (3); возвращать 0; } Comproc.c ЬурейеЙ структура Msg_context {INT NodeId; } Msg_context; недействительными test2 (интермедиат NodeId) {Int I = 1; для (я = 1; я } Если ((pid4 = вилка ()) <0) {Е ( "pid4 вилка ошибки \ п"); } Еще если (pid4 == 0) {Е ( "Я в четвертый процесс \ п"); INT NodeId = 4; // cmc_init (NodeId); // test2 (NodeId); возвращать 0; } Если (waitpid (-1, NULL, 0) <0) {Е ( "wait1 ошибка \ п"); } Сна (3); возвращать 0; } Comproc.c ЬурейеЙ структура Msg_context {INT NodeId; } Msg_context; недействительными test2 (интермедиат NodeId) {Int I = 1; для (я = 1; я } Если ((pid4 = вилка ()) <0) {Е ( "pid4 вилка ошибки \ п"); } Еще если (pid4 == 0) {Е ( "Я в четвертый процесс \ п"); INT NodeId = 4; // cmc_init (NodeId); // test2 (NodeId); возвращать 0; } Если (waitpid (-1, NULL, 0) <0) {Е ( "wait1 ошибка \ п"); } Сна (3); возвращать 0; } Comproc.c ЬурейеЙ структура Msg_context {INT NodeId; } Msg_context; недействительными test2 (интермедиат NodeId) {Int I = 1; для (я = 1; я
mHuster
1

голосов
1

ответ
43

Просмотры

Why are threads not completing execution in Python? Semaphores are providing process synchronization but execution is not getting completed

The provided code is about 2 thread trying to access the function increment() to increment the value of a global variable x. I have designed a semaphore class for process synchronization. So the expected increment of each thread is expected to be 1000000 summing up to 2000000. But actual output is not reaching up to 2000000. The output is reaching up to 1800000 - 1950000. Why are all loop not executing? import threading as th x=0 class Semaphore: def __init__(self): self.__s = 1 def wait(self): while(self.__s==0): pass self.__s-=1 def signal(self): self.__s+=1 def increament(s): global x s.wait() x+=1 s.signal() def task1(s): for _ in range(1000000): increament(s) def task2(s): for _ in range(1000000): increament(s) def main(): s = Semaphore() t1 = th.Thread(target=task1,name="t1",args=(s,)) t2 = th.Thread(target=task2,name="t1",args=(s,)) t1.start() t2.start() #Checking Synchronization for _ in range(10): print("Value of X: %d"%x) #waiting for termination of thread t2.join() t1.join() if __name__=="__main__": main() print("X = %d"%x) #Final Output Output: Value of X: 5939 Value of X: 14150 Value of X: 25036 Value of X: 50490 Value of X: 54136 Value of X: 57674 Value of X: 69994 Value of X: 84912 Value of X: 94284 Value of X: 105895 X = 1801436
1

голосов
1

ответ
113

Просмотры

How to start a Windows `runas` process with Java?

У меня есть команда для Windows Запуск от имени, который прекрасно работает при вводе в командной строке, но не тогда, когда вызывается из моей программы Java через Runtime.exec (). Код выглядит почти так же, как это: // Создать процесс. . Процесс процесса = Runtime.getRuntime () Exec (string.Format ( "RunAs / noprofile / пользователь: DOMAIN \\ OtherUser \" % s \», команда)); // Введите пароль попробовать (OutputStream OutputStream = процесс.. getOutputStream (); PrintWriter PrintWriter = новый PrintWriter (OutputStream)) {printWriter.printf ( "% s \ п", пароль); printWriter.flush ();} поймать (IOException ех) {ex.printStackTrace ();} // подождите, пока процесс прекратить process.waitFor ();. Я вижу приглашение на ввод пароля, введите пароль для DOMAIN \ OtherUser :, а затем процесс немедленно завершается с значением 1. В качестве эксперимента, я переместил process.waitFor (); выше код, который вводит пароль, ожидая процесса повесить на приглашение ввести пароль. Но этот процесс не вешает. Он по-прежнему заканчивается 1! (А потом попытка ввести пароль вызывает java.io.IOException: поток Closed.) Тот же самый код будет успешно запускать процессы, которые не требуют ввода (и не проходят через руну), а также успешно обеспечивает ввод Судо --stdin на Linux. Я изучил много подобных вопросов, не повезло. Окна в вопросе Windows 7 и Java в вопросе Java 8. Поток Closed.) Тот же самый код будет успешно запускать процессы, которые не требуют ввода (и не проходят через руну), а также успешно обеспечивает ввод Судо --stdin на Linux. Я изучил много подобных вопросов, не повезло. Окна в вопросе Windows 7 и Java в вопросе Java 8. Поток Closed.) Тот же самый код будет успешно запускать процессы, которые не требуют ввода (и не проходят через руну), а также успешно обеспечивает ввод Судо --stdin на Linux. Я изучил много подобных вопросов, не повезло. Окна в вопросе Windows 7 и Java в вопросе Java 8.
davidrmcharles
1

голосов
0

ответ
78

Просмотры

Начать процесс в новом рабочем столе

Я пытаюсь запустить процесс на новом рабочем столе. Это код, который я до сих пор, но она открывает процесс в фоновом режиме. Новый рабочий стол создается отлично. Так что все это работает отлично. Однако новый процесс не открывается в новом рабочем столе. Мне нужно, чтобы привести внешний процесс к фронту или открыть его в новом рабочем столе, где я делаю неправильно с относительно начала процесса в новом рабочем столе? Вы можете помочь, пожалуйста? Спасибо за любой вход с использованием системы; используя System.Drawing; используя System.Runtime.InteropServices; используя System.Threading.Tasks; используя System.Windows.Forms; используя System.Diagnostics; Пространство имен AntiKeylogger {// общественная программа частичного класса: NetkioskVDesktop.Form1 // общественный частичный класс Программа: Программа статического класса {[DllImport ( "user32.dll")] общественный статический ехЬегп IntPtr CreateDesktop (строка lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, внутр dwFlags, UINT dwDesiredAccess, IntPtr LPSA); [DllImport ( "user32.dll")] частный статический ехЬегп BOOL SwitchDesktop (IntPtr hDesktop); [DllImport ( "User32.dll")] общественности статической BOOL ехЬегп CloseDesktop (IntPtr ручка); [DllImport ( "User32.dll")] общественности статической BOOL ехЬегп SetThreadDesktop (IntPtr hDesktop); [DllImport ( "user32.dll")] общественный статический ехЬегп IntPtr GetThreadDesktop (интермедиат dwThreadId); [DllImport ( "kernel32.dll")] общественный статический ехЬегп INT GetCurrentThreadId (); перечисление DESKTOP_ACCESS: UINT {DESKTOP_NONE = 0, DESKTOP_READOBJECTS = 0x0001, 0x0002 = DESKTOP_CREATEWINDOW, DESKTOP_CREATEMENU = 0x0004, 0x0008 = DESKTOP_HOOKCONTROL, DESKTOP_JOURNALRECORD = 0x0010, статической силы основных (String [] арг) {IntPtr hOldDesktop = GetThreadDesktop (GetCurrentThreadId ()); IntPtr hNewDesktop = CreateDesktop ( "RandomDesktopName", IntPtr.Zero, IntPtr.Zero, 0, (UINT) DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); SwitchDesktop (hNewDesktop); Task.Factory.StartNew (() => {SetThreadDesktop (hNewDesktop); Application.EnableVisualStyles (); Application.SetCompatibleTextRenderingDefault (ложь); Application.Run (новый NetkioskVDesktop.Form1 ()); Process.Start ( "C: \\ Окна \\ System32 \\ Notepad.exe ");}) Wait (). SwitchDesktop (hOldDesktop); CloseDesktop (hNewDesktop); }}} Ноль, IntPtr.Zero, 0, (UINT) DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); SwitchDesktop (hNewDesktop); Task.Factory.StartNew (() => {SetThreadDesktop (hNewDesktop); Application.EnableVisualStyles (); Application.SetCompatibleTextRenderingDefault (ложь); Application.Run (новый NetkioskVDesktop.Form1 ()); Process.Start ( "C: \\ Окна \\ System32 \\ Notepad.exe ");}) Wait (). SwitchDesktop (hOldDesktop); CloseDesktop (hNewDesktop); }}} Ноль, IntPtr.Zero, 0, (UINT) DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); SwitchDesktop (hNewDesktop); Task.Factory.StartNew (() => {SetThreadDesktop (hNewDesktop); Application.EnableVisualStyles (); Application.SetCompatibleTextRenderingDefault (ложь); Application.Run (новый NetkioskVDesktop.Form1 ()); Process.Start ( "C: \\ Окна \\ System32 \\ Notepad.exe ");}) Wait (). SwitchDesktop (hOldDesktop); CloseDesktop (hNewDesktop); }}} SetCompatibleTextRenderingDefault (ложь); Application.Run (новый NetkioskVDesktop.Form1 ()); Process.Start ( "C: \\ Windows, \\ System32 \\ Notepad.exe"); }).Подождите(); SwitchDesktop (hOldDesktop); CloseDesktop (hNewDesktop); }}} SetCompatibleTextRenderingDefault (ложь); Application.Run (новый NetkioskVDesktop.Form1 ()); Process.Start ( "C: \\ Windows, \\ System32 \\ Notepad.exe"); }).Подождите(); SwitchDesktop (hOldDesktop); CloseDesktop (hNewDesktop); }}}
Alex Snijders
1

голосов
0

ответ
67

Просмотры

Можно ли выполнить бинарный файл, расположенный в изолированном контейнере приложения Macos в?

Можно ли выполнить бинарный файл, расположенный в изолированном контейнере приложения Macos в? В качестве теста, я попытался с помощью Process () для запуска PHP двоичного файла. Это отлично работает при запуске PHP нашел в USR / BIN / PHP, но если я копирую, что в изолированном контейнере приложения, он не будет работать. Ошибка запуска путь не доступен. Шаги для демонстрации проблемы: Поместите это в ViewController голой песочнице приложения: пусть путь = "/ USR / бен / PHP" Пусть процесс = Process () process.launchPath = путь process.arguments = [ "-v"] process.launch () Результат в консоли: PHP 7.1.16 (кли) (построен: 1 апреля 2018 года 13:14:42) (NTS) измените путь в коде выше, чтобы: пусть documentsURL = FileManager.default.urls (для: .documentDirectory в: .userDomainMask) [0] пусть путь = documentsURL.absoluteString + "PHP" печать (путь) Правильный путь выводится на консоль: файл ///Users/myuser/Library/Containers/com.domain.SandboxedApp/Data/Documents/php Скопируйте PHP двоичный в контейнер: $ ф / USR / бен / PHP /Users/myuser/Library/Containers/com.domain.SandboxedApp/Data/Documents результирующая ошибка в консоли: 2018-07-01 20: 08: 30,630442 + 1200 SandboxedApp [43579: 20898286] Не удалось установить ( contentViewController) определяется пользователем досматриваемого собственности на (NSWindow): путь запуска не доступен Почему не будет Process () запустить PHP из контейнера? И почему такое сообщение странно ошибка? . (Пь вы могли бы спросить, почему я хотел бы сделать это Есть несколько причин, например, я хотел бы более глубоко, как работает разрешение песочницы понять, я хотел бы песочницу приложения, которое способно запускать заданный пользователь двоичных файлов не предусмотренные MacOS и не распространяется в приложении»
jeff-h
1

голосов
1

ответ
74

Просмотры

Xcode / Swift: Как добавить дополнительный аргумент к исполнению Баша

У меня есть этот код: FUNC syncShellExec (путь: String) {пусть скрипт = пусть процесс процесса = Process () пусть outputPipe = Pipe () пусть filelHandler = outputPipe.fileHandleForReading process.launchPath = "/ bin / баш" [путь] .arguments = сценарий process.standardOutput = outputPipe. , , В Swift я называю это так: self.syncShellExec (путь: Bundle.main.path (forResource: «начальный», OfType: «команда»)) Теперь я хочу, чтобы добавить дополнительный аргумент для самого скрипта (с помощью функций в пределах Bashscript). В терминале было бы так: / USR / бен / Баш initial.command Do_My_Function Как добавить это к процессу?
Sascha7777
1

голосов
2

ответ
38

Просмотры

Как реализовать фоновый процесс для контроллера в angularjs?

Предположим, что существует размер несколько ссылок. Каждое звено Клик обрабатывается контроллером. Рассмотрим ситуацию: Пользователь посетить некоторые страницы. Пусть говорят, что это / поиск, где пользователь вводит ключевые слова и нажмите кнопку поиска. Фоновый процесс начался (waitint для поиска ответа в нашем случае) пользователь переходит на другую ссылку после того, как некоторое время пользователь возвращается к Fisrt странице (/ поиск) На 4 angulajs странице загрузки точки, как пользователь переходит к нему в первый раз. Как сделать angulajs Remeber не заявляют, но процесс? Например, если процесс не завершен он показывает прогресс бар, но если он закончил это дает данные из результата процесса и сделать новую страницу. Как реализовать это? Примечания Я нашел это, но это о только состоянии без сохранения процесса. Я обнаружил, что, но это о запуске какой-то процесс в фоновом режиме без управления результатов или состояния процесса (подножка или законченного)
Cherry
1

голосов
0

ответ
60

Просмотры

Узел child_process и подергивание апи

Я пытаюсь создать простой скрипт для запуска нескольких узлов файлов, эти файлы только интерфейсы API для котировок базы данных, аутентификации, и дергаться бот. Цитата и Authentication работа просто найти, однако они дергаются ботом делает это не говорит, что его подключения к серверу, но когда он идет, чтобы выполнить любые команды, он получает необработанное отказ обещания или некоторые такие ошибки Однако, когда я бег дергаться бот отдельно в своем собственном терминале сессии, а не из сценария он прекрасно работает без каких-либо выброшенных ошибок. Почему это будет работать с отдельной сессии, что я создаю, но не от child_process? Примечание: Я имел child_process начать новую оболочку и ее все тот же вопрос Процесс сценария:. Const EXEC = требуется ( «child_process») Exec; константная икра = требуется ( 'child_process'). икра // Я думаю twtich процесс бота имеет вопрос без сколько // данных передаются на стандартный вывод или поток ошибки, и мне нужно // указать, сколько данных разрешено twitchBot = Exec ( 'узел ./twitchbot-api/index. JS', функция (ошибка, стандартный вывод, STDERR) {console.log ( 'стандартный вывод:' + стандартный вывод); console.log ( 'STDERR:' + STDERR), если (ошибка == NULL) {console.log (» Exec ошибка: '+ ошибка);}}) twitchBot.stdout.on (' данные», (данные) => {console.log (` twitchBot стандартный вывод: \ п $ {} `данных);}); // whenver я получаю сообщение об ошибке от quoteDataBase также отображается в родительском процессе twitchBot.stderr.on ( 'данные', (данные) => {console.error ( `twitchBot Stderr: \ п $ {данные}`);} ); // это выдает ошибку в первый раз, когда я пытаюсь командой говоря, не подключены к серверу, Я думаю, что мне нужно сделать это как Exec // пусть twitchBot = мицелий ( 'узел ./twitchbot-api/index.js', {// STDIO: 'унаследуют', // оболочка: верно, // отдельностоящий: правда, //}) // //twitchBot.unref (); // twitchBot.on ( 'ошибка', (ошибка) => {// console.log ( `Erorr $ {ошибка}`) //}) // запускает процесс EXEC ребенка для моей базы данных котировок пусть quoteDataBase = Exec ( 'узел ./quotes-api/index.js', функция (ошибка, стандартный вывод, STDERR) {console.log ( 'стандартный вывод:' + стандартный вывод); console.log ( 'STDERR:' + STDERR); если ( ! ошибка == NULL) {console.log ( 'Exec ошибка:' + ошибка);}}) // какой бы процесс Exec ребенка quoteDatabase запихивает стандарт из (консоль) отображается на родительском процессе // аки терминала I запустить apiStart из quoteDataBase.stdout.on ( 'данные', (данные) => {консоли. журнал ( `quoteDataBase стандартный вывод: \ п $ {данные}`); }); // whenver я получаю сообщение об ошибке от quoteDataBase также отображается в родительском процессе quoteDataBase.stderr.on ( 'данные', (данные) => {console.error ( `quoteDataBase STDERR: \ п $ {данные}`);} ); // запускает дочерний процесс для моего пользователя Authentication пусть AuthenDataBase = Exec ( 'узел ./authen-api/index.js', функция (ошибка, стандартный вывод, STDERR) {console.log ( 'стандартный вывод:' + стандартный вывод); console.log ( 'STDERR:' + STDERR), если (ошибка == NULL) {console.log ( 'Exec ошибка:' + ошибка);}}) и затем код подергивание бота: Const TMI = требуется (» tmi.js ') константных haikudos = требуется (' haikudos ') требуют (' dotenv ES6-обещание ') polyfill () ') конфигурации () требуется (.'. требовать ( 'изоморфными-выборки'); // Допустимые команды начинаются с: пусть commandPrefix = '!' // Определение параметров конфигурации: пусть OPTS = {идентичность: {имя пользователя: process.env.user, пароль: process.env.pass}, каналы: [ "dshrops1"]} // Эти команды бот знает (как определено ниже ): пусть knownCommands = {эхо, хайку, цитаты} // функция вызывается, когда команда «эхо» выдается: функция эхо (целевые, контекст, PARAMS) {// Если есть что-то повторить: если (params.length) { // Вступи Params в строку: Const тзд = params.join (»«) // Отправляем его обратно в правильное место: SendMessage (цель, контекст, сбщ)} еще {// Ничего не эхо console.log ( ` * Ничего не echo`)}} // функция вызывается, когда команда "хайку" выдаются: функция хайка (цель, контекст) {// Сформировать новую хайку: haikudos ((newHaiku) => {// Разделить его линия- построчно: newHaiku. . Раскол ( '\ п') Foreach ((з) => {// Отправляет каждую строку отдельно: SendMessage (цель, контекст, з)})})} Функция асинхронной котировка (цель, контекст) {// косяк развернуть эту на AWS еще недо развернуть свой API базы данных, а также. пусть цитата = ждет выборок ( 'HTTP: // локальная: 3006 / случайный') .then (соответственно => resp.text ()) SendMessage (цель, контекст, цитата)} // Вспомогательная функция для отправки правильного типа сообщения : функция SendMessage (цель, контекст, сообщение) {если (контекст [ 'сообщения типа'] === 'шепот') {client.whisper (цель, сообщение)} еще {client.say (цель, сообщение)}} // Создание клиента с нашими вариантами: пусть клиент = новый tmi.client (ОПТС) // Зарегистрировать наши обработчики событий (как определено ниже): client.on ( 'сообщение', onMessageHandler) client.on ( 'подключен', onConnectedHandler) client.on ( 'отключен', Const команда = knownCommands [Имя_команды] // Затем вызовите команду с параметрами: команда (цель, контекст, PARAMS) console.log (команда `* Выполненная $ {Имя_команды} для $ {context.username}`)} еще {консоли. LOG ( `* Неизвестная команда $ {имя_команды} от $ {context.username}`)}} // Вызывается каждый раз, когда бот подключается к Twitch чата: функция onConnectedHandler (адрес, порт) {console.log ( `* подключение к $ {адр}: $ {порт} `)} // Вызывается каждый раз, когда бот отсоединяется от Twitch: функция onDisconnectedHandler (причина) {console.log (` WOMP WOMP, отсоединен: $ {причина} `) process.exit (1) } к сожалению О каких-либо проблемах форматирования Несмотря на все проблемы, которые могут быть неправильно с дергаться ботом он отлично работает, когда я запускаю его из отдельного терминала мне любопытно, почему он работает от сценария, и что я могу сделать. заметки:
1

голосов
0

ответ
291

Просмотры

Зомби процессы в Докер также с инициализации / TiNi системы

Проблема Docker контейнеры начали через Jenkins команды трубопровода docker.image (imageToStart) .inside ( «- инициализации») не может быть остановлено из-за зомби процессов, оставленных контейнером. Вопросы Как можно получить зомби процессов из контейнера Докер, когда он был запущен с опцией «--init»? Кто-то еще ударил тот же вопрос? Б среды Docker 18.03.1-се Дженкинс 2.60.2 Docker Pipeline плагин 1,12 Подробности Когда контейнер был запущен из трубопровода Jenkins с помощью команды:. Docker.image ( 'альпийской') внутри ( '- INIT') {ш ( «пс -efa -o PID, PPID, пользователь, Прдч»)} Есть несколько процессов в этом контейнере с родительского PID 0: не кажется [Трубопроводная] withDockerContainer локо быть запущен внутри контейнера $ Docker запуска -t -d - у 1001: Когда сам процесс выходит из его потомков назначаются PPID снаружи контейнера и не PPID 1 из «INIT» процесса контейнера. Новый родитель PID является PID процесса «Докер-containerd-прокладка» контейнера. С небольшим примером я не мог воспроизвести процессы зомби, но вот ситуация с более сложной Дженкинс работы: команда Docker от Jenkins задания $ Docker запуска -t -d -u 1001: 1002 \ --init \ -w / lhome / TestAdmin / Jenkins-coreloops / рабочее пространство / тест-задание / базы данных \ -v / lhome / TestAdmin / Jenkins-coreloops / рабочее пространство / тест-задание / базы данных: / lhome / TestAdmin / Jenkins-coreloops / рабочее пространство / тест-задание / базы данных : RW, г \ -v / lhome / TestAdmin / Jenkins-coreloops / рабочее пространство / тест-задание / базы данных TMP: / lhome / TestAdmin / Jenkins-coreloops / рабочее пространство / тест-задание / базы данных TMP: RW, г \ -e ******** \ --entrypoint кошка richmond.lhs-systems.com:5000/ait/mpde [Трубопроводная] {[Трубопроводная] ш 10:03:09 [база] Запуск сценария оболочки 10 : 03: 09 + ./db-upgrade.sh внутри контейнера скрипты запускаются сценарии оболочки называют Perl скрипты PERL скрипты запуска SQL * Plus (1 экземпляр каждого входа в базу данных) Perl скрипты отправки команд SQL в SQL * Plus экземпляры через STDIN When закрытие заканчивается, и Дженкинс пытается остановить контейнер, остаются следующие процессы: [TestAdmin @ testhost] ~ # пс -efa | Grep -VW Grep | Grep -w 47077 корня 1725 47077 0 10:03? 00:00:00 [пс] корень 1732 47077 0 10:03? 00:00:00 [Докер-RunC] корень 2887 47077 0 10:04? 00:00:00 [SQLPLUS] корень 2915 47077 0 10:04? 00:00:00 [SQLPLUS] корень 47077 17349 0 10:03? 00:00: 00 докер-containerd-регулировочная шайба -namespace мобы -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/1863503ca54f75168db8ce20c78b821c0e5280f07d59875e8f651db4f0b67d9f -адрес / вар / запустить / грузчик / containerd / докер-containerd. носок -containerd двоичного / USR / бен / докер-containerd -runtime корень / вар / запустить / грузчик / время выполнения-RunC корня 47098 47077 0 10:03 PTS / 0 00:00:00 / DEV / INIT - корень кошки 47506 47077 0 10:03? 00:00:00 [ш] [TestAdmin @ testhost] ~ # и команда 'Докер остановка' прервана после таймаута 180 секунд. Для очистки остальные процессы контейнера этот процесс Докер-containerd-прокладка должна быть убиты с SIGKILL. Обратите внимание, мы наблюдали этот вопрос на нашем недавно установленном сервере CentOS: - CentOS Linux релиз 7.5.1804 (ядро) - связанные с окружающей части от «Докера информации»: Версия сервера: 18.03.1-CE Драйвера хранения: overlay2 Резервного Filesystem: ExtFS Поддержки d_type : истинная Native Overlay Diff: верно Logging Driver: JSON-файл контрольной группы Driver: cgroupfs Плагины: Объем: локальная сеть: мост хоста macvlan нулевой оверлей Log: awslogs fluentd gcplogs gelf journald JSON-файл logentries Splunk системного журнала Swarm: неактивные Runtimes: RunC По умолчанию время выполнения : RunC Init Binary: докер-INIT containerd версия: 773c489c9c1b21a6d78b5c538cd395416ec50f88 RunC версия: версия 4fc53a81fb7c994640722ac585fa9ca548971871 INIT: 949e6fa параметры безопасности: Seccomp профиля: по умолчанию Kernel Версия: 3.10.0-862.6.3.el7.x86_64 Операционная система: CentOS Linux 7 (основной) OSTYPE: Linux Архитектура: x86_64 процессоры: 48 Общая память: 377.6GiB Docker Root Dir: / вар / Библиотека / Режим отладки докера (клиент): Режим ложной отладки (сервер): ложные регистрации: https://index.docker.io/v1/ Experimental: ложные Незащищенные реестры: 127.0.0.0/8 Живое Восстановление Enabled: ложное поведение на других наш Docker хозява схожи по отношению к нескольким процессам с родительской PID 0, но мы не видим, что контейнеры были висят на остановке или что там было такое же количество зомби процессов. Для comparisation подобная «Докер информации» выписка из одного из этих других хостов: Сервер Версия: 17.05.0-в.п. Драйвер хранения: devicemapper Названия Бассейна: док-thinpool бассейн BLOCKSIZE: 524.3kB Base Размер устройства: 16. https://index.docker.io/v1/ Experimental: ложные Незащищенные Реестры: 127.0.0.0/8 Живое Восстановление Enabled: ложный Редактировать +2018-Aug-01: Как Обойти я добавил процесс инициализации, как subreaper также проблемный «Docker Exec 'вызовы и проблематичной „ш“ вызывает в докер Jenkins (). внутри () замыкание. Это устранило процессы зомби в нашей среде.
Bert Lindemann
1

голосов
0

ответ
45

Просмотры

Print exit order of child processes

I have this code. My aim is to create 'n' child processes from parent process and print the pid of each child processes once it is created. Then I'll ask each child process to sleep for random duration using rand_r function and exit. I want to print the exit order of child processes i.e I want to print their pids in their exit order. This is my C code. It is not giving required output: #include #include #include #include #include int func(int n) { if(n==0){return 0;} int pid=fork(); unsigned int k=n; int x=rand_r(&k) % 3; //printf("here: %d\n", x); if(pid==0){ printf("Child %d is created\n",getpid()); func(n-1); sleep(x); printf("Child %d exited\n",getpid()); exit(0); } return 1; } int main(int argc, char *argv[]){ char *inp = argv[1]; int n = atoi(inp); func(n); return 0; } I want output like this: Child 7432 is created Child 7433 is created Child 7434 is created Child 7435 is created Child 7433 exited Child 7432 exited Child 7435 exited Child 7434 exited
Light
1

голосов
0

ответ
27

Просмотры

Executing an exe file on Plesk

Я создал веб-приложение, с помощью asp.net и я опубликовал свой веб-сайт на своем домене (я использую Plesk) и веб-сайт функционирует нормально. В одном из моих страниц я исполняю файл ех в коде позади, который возвращает выходной сигнал, который затем будет распечатан на странице. Он корректно работает на локальном хосте, а на панели управления Plesk, я получаю сообщение об ошибке «Эта программа заблокирована групповой политикой». Это в то время как я установил уровень доверия CAS к полной, я позволил «precompilie во время публикации» вариант, когда я опубликовал веб-приложение. Я стер тег в web.config, но вопрос до сих пор не исправлен. Вот трассировки стека: [Win32Exception (0x80004005): Эта программа заблокирована групповой политикой. Для получения более подробной информации, обратитесь к системному администратору] System.Diagnostics.Process. StartWithCreateProcess (ProcessStartInfo startInfo) +1889 System.Diagnostics.Process.Start () +119 Project.StyleSheets.Result.Page_Load (отправитель объекта, EventArgs е) в Е: \ Soroush \ Программирование \ Спарк \ Project \ Project \ Result.aspx. CS: 24 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs е) +51 System.Web.UI.Control.OnLoad (EventArgs е) +95 System.Web.UI.Control.LoadRecursive () +59 System .Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, булева includeStagesAfterAsyncPoint) +678 линия 24 является линией, с которой я начала исполняемый файл, а именно я выполнить следующий код: Process компилятор = новый процесс (); compiler.StartInfo.FileName = Server.MapPath ( "~ / Программа / расстояние / Новости-сборщик / Новости-Fetcher.exe"); compiler.StartInfo.Arguments = String.Format ( "{0}", Request.QueryString [ "поиск"]); compiler.StartInfo.UseShellExecute = FALSE; compiler.StartInfo.RedirectStandardOutput = TRUE; Line24: compiler.Start (); Как я могу решить свою проблему? Спасибо!
1

голосов
0

ответ
28

Просмотры

После нажатия (х) Закрывает ActiveForm Но его процесс все еще работает.

Привет Так у меня есть эта странная проблема [никогда не сталкивался, как это до того]. это возможно из-за петли, что у меня что так: в то время как (chkDefault.CheckState == CheckState.Checked) {ValueOfX.Text = Convert.ToString (mem.ReadFloat (XGET)); ValueOfY.Text = Convert.ToString (mem.ReadFloat (yGet)); ValueOfZ.Text = Convert.ToString (mem.ReadFloat (zGet)); Application.DoEvents (); } Этот цикл производится после того, как кнопка нажата: частная пустота Start_Click (объект отправителя, EventArgs е) PS: Процесс продолжает работать даже после закрытия формы (х) ТОЛЬКО если я нажал на кнопку «Пуск». Я также попытался это: частный недействительным Form1_FormClosed (объект отправителя, FormClosedEventArgs е) {Процесс Proc = Process.GetProcessesByName ( "myFormProcess") [0]; Proc.Close (); } Но ничего не похоже на работу ... Я добавил MessageBox Form1_FormClosed, чтобы увидеть, если он работает actualy после закрытия формы и ДА это promped сообщения. Но не закрыть процесс.
Saad Amrani
1

голосов
1

ответ
92

Просмотры

Предотвратить дочерний процесс от наследования открытых портов TCP родительского процесса с библиотекой процесса подталкивания

У меня есть приложение C ++ прослушивание на определенном TCP-порт. Кроме того, приложение запускает дочерний процесс, используя дочерний класс Повысьте из библиотеки процесса подталкивания. Как только запускается ребенок выход NETSTAT команды показывает, что порт TCP также получает связанный с созданным дочерним процессом. Есть ли способ, с помощью которого я могу предотвратить ребенка от наследования портов материнской компании при использовании наддува библиотеки процесса? Ребенок создан как: п.н. :: ребенка * прок = новый п.н. :: ребенок ( "a.out", п.о. :: std_out> стандартный вывод, п.о. :: std_err> STDERR); Я использую платформу Linux. Благодарю.
sbunny
1

голосов
1

ответ
68

Просмотры

Symfony / исключение процесса при запуске python3 от контроллера Laravel на удаленном сервере (Debian)

Я пытаюсь выполнить питон скрипт (3.6.5), который находится в одной папке, в моей папке Laravel приложения. Сценарий был вызван из контроллера и извлекает выход scrpit. Я использую Symfony / процесс для выполнения сумы, как в коде ниже: публичные статические функции searchAnswers ($ ввода) {$ процесса = новый процесс (массив ( «реж», базовый_путь () «/ приложение / Поисковик»). ); $ Процессно> setWorkingDirectory (базовый_путь () '/ приложение / Поисковик'.); $ Процессно> setCommandLine ( 'python3 SearchEngine.py' ' "' $ вход.".".); $ Процессно> SetTimeout (2 * 3600); $ Процессно> Run (); если ($ процессно> isSuccessful ()) {// выполняется после завершения команды певд ProcessFailedException ($ процесса); } $ List_ids = array_map ( 'intval', взрываются (»», $ Процесс-> getOutput ())); Информация ($ list_ids); $ ходатайств = Solicitation :: присоединиться ( 'ответами', 'solicitations.id', '=', 'answers.solicitation_id') -> где ( 'solicitations.id', $ list_ids) -> предел (20) -> прибудет (); информация ($ ходатайств); вернуть $ ходатайства; } В моем локальном хосте, сценарий был вызван без проблем, либо из моего терминала или от моего запущенного приложения с помощью HTTP-запросов. Но, после того, как я загрузил свою версию приложения на мой удаленный сервер, который Debian, я получаю следующее исключение: «»»Команда„python3 SearchEngine.py „? O Que é диабет““не удалось. Любые идеи о том, что происходит? Заранее спасибо! Любые идеи о том, что происходит? Заранее спасибо!
nigel.lima
1

голосов
2

ответ
134

Просмотры

Как сделать периодической фоновой работы (15 минут периодического интервала) для запуска на неопределенный срок Oreo и позже?

После Doze режим был введен в Android 8, Android навязала много ограничений на фоне работы, что делает приложение вести себя в незапланированной образом. В одном из моих приложений, я использовал, чтобы принести уровень заряда батареи каждые 15 минут и пожарную тревогу, если уровень заряда батареи был выше желаемого уровня заряда батареи, установленного пользователем в моем приложении. Я использовал следующий код для выполнения этой задачи. настроить повтор сигнала с помощью AlarmManagerApi: государственной статической силы setAlarm (окончательный контекст Контекст) {Окончательный менеджер AlarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); если (! менеджер = NULL) {manager.setRepeating (AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, ALARM_INTERVAL, getAlarmPendingIntent (контекст)); }}, Где метод getAlarmPendingIntent выглядит следующим образом: частный статический PendingIntent getAlarmPendingIntent (окончательный контекст Context) {вернуться PendingIntent.getBroadcast (контекст, REQUEST_CODE, новый Intent (контекст, AlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT); } Настроить BroadcastReciever, чтобы получать сигналы тревоги: Он запускает службу на переднем плане, чтобы сделать общественный класс необходим фоном работы AlarmReceiver расширяет BroadcastReceiver {@Override общественного недействительный OnReceive (окончательный контекст Контекста, окончательное Намерение намерение) {если (контекст == NULL || намерение == NULL) {возвращение; } Если (intent.getAction () == NULL) {Намерение monitorIntent = новое Намерение (контекст, TaskService.class); monitorIntent.putExtra (YourService.BATTERY_UPDATE, правда); ContextCompat.startForegroundService (контекст, monitorIntent); }}} TaskService (Service делает некоторую нужную задачу) выглядит следующим образом общественный класс TaskService проходит службу {личного статический окончательную Строка CHANNEL_ID = «channel_01»; частный статический окончательный ИНТ NOTIFICATION_ID = 12345678; @Override общественного недействительный OnCreate () {super.onCreate (); createNotificationChannel ()} общественного недействительными createNotificationChannel () {// создать уведомления канал для уведомлений NotificationManager mNotificationManager = (NotificationManager) getSystemService (NOTIFICATION_SERVICE); если (Build.VERSION.SDK_INT> = Build.VERSION_CODES.O) {CharSequence имя = GetString (R.string.app_name); NotificationChannel mChannel = новые NotificationChannel (CHANNEL_ID, имя, NotificationManager.IMPORTANCE_DEFAULT); если (mNotificationManager! = NULL) {mNotificationManager.createNotificationChannel (mChannel); }}} @Override общественного ИНТ onStartCommand (Намерение Намерение, Int флаги, внутр startId) {startForeground (NOTIFICATION_ID, getNotification ()); BatteryCheckAsync batteryCheckAsync = новый BatteryCheckAsync (); batteryCheckAsync.execute (); вернуться START_STICKY; } @Override общественного IBinder onBind (Intent намерения) {возвращение нуль; } Частного уведомлений getNotification () {NotificationCompat.Builder строителя = новый NotificationCompat.Builder (это, CHANNEL_ID) .setContentText (текст) .setContentTitle ( "выборка уровня заряда батареи") .setOngoing (правда) .setPriority (Notification. PRIORITY_LOW) .setSmallIcon (R.mipmap.ic_launcher) .setWhen (System.currentTimeMillis ()); если (Build.VERSION.SDK_INT> = Build.VERSION_CODES.O) {builder.setChannelId (CHANNEL_ID); } Вернуть builder.build (); Частный} класс BatteryCheckAsync расширяет AsyncTask {@Override защищен Пустоты doInBackground (Пустота ... arg0) {IntentFilter IFilter = новый IntentFilter (Intent.ACTION_BATTERY_CHANGED); Намерение BatteryStatus = YourService.this.registerReceiver (нуль, IFilter); Уровень INT = batteryStatus.getIntExtra (BatteryManager.EXTRA_LEVEL, -1); INT шкала = batteryStatus.getIntExtra (BatteryManager.EXTRA_SCALE, -1); Log.i ( "Уровень заряда батареи", String.valueOf ((уровень / (поплавок) шкала))); возвращать нуль; } Защищен недействительный onPostExecute () {YourService.this.stopSelf (); }}} BatteryCheckAsync задача получает уровень заряда батареи от фона и показывает текущий уровень заряда аккумулятора в журналах. Теперь, если я запустить приложение и проведите приложение от моей недавней App List и выключить экран устройства. Приложение печатает журналы с уровнем заряда батареи в андроид версии до Android 8. Но после того, как андроид 8, это перестало работать в течение нескольких минут ударяя приложение от моего списка последних приложений и выключения экрана устройства. Такое поведение, как ожидается, в спящем режим был введен в андроиде и тревоги не откладывается до следующего окна обслуживания. ================================================== =============== от андроида документации по https://developer.android. ком / обучение / мониторинг-устройство состояние / доза-ожидание, я обнаружил, что документально подтверждено, что стандарт AlarmManager сигнализация (в том числе setExact () и setWindow ()) откладывается до следующего окна обслуживания. Если вам необходимо установить сигнализацию, что огонь в дрему, используйте setAndAllowWhileIdle () или setExactAndAllowWhileIdle (). Сигналы, установленные с setAlarmClock () продолжают стрелять нормально - система выходит Doze незадолго до этих тревог пожара. Таким образом, я изменил свой код следующим образом Сейчас: государственный статический силу setAlarm (окончательный контекст Context) {окончательный менеджер AlarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); если (менеджер == NULL) {возвращение; } INT SDK_INT = Build.VERSION.SDK_INT; если (SDK_INT <Build.VERSION_CODES.KITKAT) {manager.set (AlarmManager.ELAPSED_REALTIME_WAKEUP, ALARM_INTERVAL, getAlarmPendingIntent (контекст)); } Иначе, если (SDK_INT <Build.VERSION_CODES.M) {manager.setExact (AlarmManager.ELAPSED_REALTIME_WAKEUP, ALARM_INTERVAL, getAlarmPendingIntent (контекст)); } Еще {manager.setExactAndAllowWhileIdle (AlarmManager.ELAPSED_REALTIME_WAKEUP, ALARM_INTERVAL, getAlarmPendingIntent (контекст)); }} Вместо установки повторяющегося будильника, я установил один раз точный сигнал тревоги и планирования следующий себя при обращении с каждой доставки сигнала в методе onRecieve вещательного приёмника повторно запустить метод выше setAlarm (). Теперь, если я запустить приложение и проведите приложение от моего списка последних приложений на OnePlus 3 и выключить экран устройства, журналы приложение печатает в течение 40-45 минут, а затем внезапно тревогу и передний план служба прекращает работу. Есть ли какой-либо один решение для гарантированного выполнения периодической фоновой задачи в течение неопределенного периода времени в Android Oreo и выше? Я тестирование его на OnePlus устройств с Android Oreo или выше установлен.
Abhishek Luthra
1

голосов
1

ответ
62

Просмотры

Столкнувшись с трудностями, чтобы остановить поток в детском процессе икры в Node.js?

Я пытаюсь использовать Node.js ребенка процесса икру. Ниже кода будет выполнять определенные команды оболочки и считывать данные в качестве буфера потоков слушателя, предоставляемого процесс икры. Bluebird модуль узла Обещание используется, чтобы обернуть вокруг дочернего процесса. вар execSpawn = требуется ( '') child_process икру. вар Promise = требуется ( 'Bluebird'); spawnAction = функция (путь, CMD, CB) {Функция возврата (решительность, отклонить) {CmdExec = execSpawn (путь, CMD); вар FileData = {} граф переменная = 0; cmdExec.stdout.on ( 'данные', функция (данные) {если (CB) {FileData = data.toString ( 'utf8'); ''} еще {если (данные ==) {кол + = 1;} еще {console.log (data.toString ( 'utf8'));}}}); cmdExec.stderr.on ( 'данные', Функция (данные) {если (отклонить) {отвергнуть ( "ошибка в мокрой очистки "+ cmd.slice (-1) +"" + data.toString ( 'utf8')); }}); cmdExec.on ( 'выход', функция () {console.log ( "достичь выхода событие");}) cmdExec.on ( 'закрыть', функция () {если (CB) {Решимость (CB (FileData)) ;} еще {решимость (количество);}}); }} Выше метод вызывается несколько раз для параллельного выполнения с помощью следующих способов: обещания = [] ср = новый Promise (spawnAction (Путь, [ 'Cmd'], parsingMethodHandler)); cp.then (функция (данные) {data.forEach (функция (диск) {вар обработчик = новый посыл (self.spawnAction (Путь, "следующая команда")); promises.push (обработчик);}} .then (функция () {Promise.all (обещания). затем (функция (результат) {// определенные действия} .catch (функция (ERR) {// улов ошибки специфичные для отказа обработчика обещания})}). улов (функция (ERR) {// ошибка специфичную для первого обещание}) и моя проблема в случае если какая-либо ошибка во время выполнения тех, кто обещает он должен достичь «cmdExec.stderr.on» и сделать отбраковки обещания. Даже после того, как ошибка я получаю консольных журналы, помещенные внутри потоков «cmdExec.stdout.on», я не мог отказаться от получения буферных потоков. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. задвижка (функция (ERR) {// поймать ошибки специфичны для отказа обработчика обещания})}). задвижка (функция (ERR) {// ошибка специфична для первого обещания}) И моя проблема, если в случае какой-либо ошибки во время выполнение тех, кто обещает он должен достичь «cmdExec.stderr.on» и не исключающий обещание. Даже после того, как ошибка я получаю консольных журналы, помещенные внутри потоков «cmdExec.stdout.on», я не мог отказаться от получения буферных потоков. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. задвижка (функция (ERR) {// поймать ошибки специфичны для отказа обработчика обещания})}). задвижка (функция (ERR) {// ошибка специфична для первого обещания}) И моя проблема, если в случае какой-либо ошибки во время выполнение тех, кто обещает он должен достичь «cmdExec.stderr.on» и не исключающий обещание. Даже после того, как ошибка я получаю консольных журналы, помещенные внутри потоков «cmdExec.stdout.on», я не мог отказаться от получения буферных потоков. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. задвижка (функция (ERR) {// ошибка специфична для первого обещания}) И моя проблема в случае если какая-либо ошибка во время выполнения тех, кто обещает он должен достичь «cmdExec.stderr.on» и сделать отбраковки обещания. Даже после того, как ошибка я получаю консольных журналы, помещенные внутри потоков «cmdExec.stdout.on», я не мог отказаться от получения буферных потоков. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. задвижка (функция (ERR) {// ошибка специфична для первого обещания}) И моя проблема в случае если какая-либо ошибка во время выполнения тех, кто обещает он должен достичь «cmdExec.stderr.on» и сделать отбраковки обещания. Даже после того, как ошибка я получаю консольных журналы, помещенные внутри потоков «cmdExec.stdout.on», я не мог отказаться от получения буферных потоков. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи. Я хотел бы знать, есть ли конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и остановился, бросая ошибку вместо того, чтобы продолжить в получать потоки. Заранее спасибо за любые предложения или идеи.
Rajan
1

голосов
0

ответ
35

Просмотры

значения семафоров не изменяются в Ubuntu

Я пытаюсь создать решение для переходов через реку Проблемы с «Маленькой книгой семафоров» (глава 5, раздел 7, стр 148), я использую виртуальную машину Ubuntu в моем компьютере. Проблема заключается в том, что семафоры я создал не изменяя значения, все из них остаются на 0, я использую четыре файла. Что я делаю, запустить буфер, а затем создать два процесса хакера, а затем два процесса крепостных, дело в том, что «Посадка в X» сообщение выводится перед лодка заполнена (по крайней мере, четыре пассажира) и при печати семафоров значения все они находятся в 0. header.h, где я объявляю идентификаторы семафоров и операции: #ifndef SEMAFOROS_H #define SEMAFOROS_H # include # include # include # include # include # include #define Барьер 10 #define MUTEX 11 #define SERFQUEUE 12 #define HACKERQUEUE 13 структура буфера {INT хакеров; ИНТ крепостных; }; INT sem_wait (INT Идентификатор множества семафоров, Int sem_num, Int вал) {sembuf оп структура; op.sem_num = sem_num; op.sem_op = -Val; op.sem_flg = 0; вернуть semop (&, множества семафоров, над оп, 1); } INT sem_signal (INT Идентификатор множества семафоров, Int sem_num, Int вал) {sembuf оп структура; op.sem_num = sem_num; op.sem_op = Val; op.sem_flg = 0; вернуть semop (&, множества семафоров, над оп, 1); } INT mutex_wait (INT Идентификатор множества семафоров, Int sem_num) {вернуть sem_wait (Идентификатор множества семафоров, sem_num, 1); } INT mutex_signal (INT Идентификатор множества семафоров, Int sem_num) {вернуть sem_signal (Идентификатор множества семафоров, sem_num, 1); } #Endif buffer.c, где я создаю семафоры: #include "header.h" INT основных (INT ARGC, символ * ARGV []) {INT Идентификатор множества семафоров, Шмид, я; key_t ключ; если (ARGC = 1!) {Е ( "Использование:% s \ п", ARGV [0]); вернуться -1; } Если ((ключ = ftok ( "/ DEV / нуль", 65)) == (key_t) -1) {PError (ARGV [0]); вернуться -1; } Если ((= semget Идентификатор множества семафоров (ключ, 4, 0666 | IPC_CREAT)) <0) {PError (ARGV [0]); вернуться -1; } Semctl (Идентификатор множества семафоров, Барьер, SETVAL, 4); semctl (Идентификатор множества семафоров, MUTEX, SETVAL, 1); semctl (Идентификатор множества семафоров, SERFQUEUE, SETVAL, 0); semctl (Идентификатор множества семафоров, HACKERQUEUE, SETVAL, 0); беззнаковые короткие final_values ​​[4]; semctl (Идентификатор множества семафоров, 0, GETALL, final_values); для (я = 0; г <4; я ++) {Е ( "% 3i", final_values ​​[I]); } Е ( "\ п"); если ((Шмид = shmget (ключ, SizeOf (структура буфера), 0666 | IPC_CREAT)) < 0) {semctl (Идентификатор множества семафоров, 0, IPC_RMID, 0); PError ( "shmget"); вернуться -1; } Структура буфера * Ь = (структура буфера *) Shmat (Шмид, (недействительными *) 0, 0); b-> хакерам = 0; b-> крепостные = 0; shmdt (б); возвращать 0; } Hackers.c, код для хакеров: # include "header.h" #include недействительными a_hacker (символ * Программа) {INT Идентификатор множества семафоров, Шмид, I, K, isCaptain = 0; key_t ключ; структура буфера * б; если ((ключ = ftok ( "/ Dev / нуль", 65)) == (key_t) -1) {PError (программа); Выход (-1); } Если ((= semget Идентификатор множества семафоров (ключ, 4, 0666)) <0) {PError (программа); Выход (-1); } Если ((Шмид = shmget (ключ, SizeOf (структура буфера), 0666)) <0) {PError ( "Шмид"); Выход (-1); } Ь = (структура буфера *) Shmat (Шмид, (недействительными *) 0, 0); mutex_wait (Идентификатор множества семафоров, MUTEX); b-> хакерам + = 1; если (b-> хакерам == 4) {sem_signal (Идентификатор множества семафоров, HACKERQUEUE, 4); b-> хакерам = 0; isCaptain = 1; } Иначе, если (b-> хакерам == 2 && b-> крепостные> = 2) {sem_signal (Идентификатор множества семафоров, HACKERQUEUE, 2); sem_signal (Идентификатор множества семафоров, SERFQUEUE, 2); b-> хакерам = 0; b-> крепостные - = 2; isCaptain = 1; } Еще {mutex_signal (Идентификатор множества семафоров, MUTEX); } беззнаковых коротких final_values ​​[4]; semctl (Идентификатор множества семафоров, 0, GETALL, final_values); для (я = 0; г <4; я ++) {Е ( "% 3i", final_values ​​[I]); } Е ( "\ п"); sem_wait (Идентификатор множества семафоров, HACKERQUEUE, 1); Е ( «Интернат хакерской \ п»); semctl (Идентификатор множества семафоров, 0, GETALL, final_values); для (I = 0; г <4; я ++) {Е ( "% 3i", final_values ​​[I]); } Е ( "\ п"); sem_wait (Идентификатор множества семафоров, Барьер, 1); если (isCaptain) {Е ( "Fugaaaa \ п"); mutex_signal (Идентификатор множества семафоров, MUTEX); } Sem_signal (Идентификатор множества семафоров, Барьер, 2); shmdt (б); Выход (0); } INT основных (INT ARGC, символ * ARGV []) {INT amount_hackers = 0, Идентификатор множества семафоров, я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_hackers = atoi (ARGV [1]); если (amount_hackers <1) {Е ( "% S: amount_of_hackers должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; г <amount_hackers; я ++) {если ((PID = вилка ()) <0) {Perror ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_hacker (ARGV [0]); } Еще {}} возвращает 0,; } Serfs.c, код крепостных: #include "header.h" #include недействительными a_serf (символ * Программа) {INT Идентификатор множества семафоров, Шмид, I, K, isCaptain = 0; key_t ключ; структура буфера * б; если ((ключ = ftok ( "/ Dev / нуль", 65)) == (key_t) -1) {PError (программа); Выход (-1); } Если ((= semget Идентификатор множества семафоров (ключ, 4, 0666)) <0) {PError (программа); Выход (-1); } Если ((Шмид = shmget (ключ, SizeOf (структура буфера), 0666)) <0) {PError ( "Шмид"); Выход (-1); } Ь = (структура буфера *) Shmat (Шмид, (недействительными *) 0, 0); mutex_wait (Идентификатор множества семафоров, MUTEX); b-> крепостные + = 1; если (b-> крепостные == 4) {sem_signal (Идентификатор множества семафоров, SERFQUEUE, 4); b-> крепостные = 0; isCaptain = 1; } Иначе, если (b-> хакерам == 2 && b-> крепостные> = 2) {sem_signal (Идентификатор множества семафоров, HACKERQUEUE, 2); sem_signal (Идентификатор множества семафоров, SERFQUEUE, 2); b-> крепостные = 0; b-> хакеров - = 2; isCaptain = 1; } Еще {mutex_signal (Идентификатор множества семафоров, MUTEX); } беззнаковых коротких final_values ​​[4]; semctl (Идентификатор множества семафоров, 0, GETALL, final_values); для (я = 0; г <4; я ++) {Е ( "% 3i", final_values ​​[I]); } Е ( "\ п"); sem_wait (Идентификатор множества семафоров, SERFQUEUE, 1); Е ( «Интернат крепостного \ п»); semctl (Идентификатор множества семафоров, 0, GETALL, final_values); для (я = 0; г <4; я ++) {Е ( "% 3i", final_values ​​[I]); } Е ( "\ п"); sem_wait (Идентификатор множества семафоров, Барьер, 1); если (isCaptain) {Е ( "Fugaaaa \ п"); mutex_signal (Идентификатор множества семафоров, MUTEX); } Sem_signal (Идентификатор множества семафоров, Барьер, 2); shmdt (б); Выход (0); } INT основных (INT ARGC, символ * ARGV []) {INT amount_serfs = 0, Идентификатор множества семафоров, я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_serfs = atoi (ARGV [1]); если (amount_serfs <1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? Барьер, 2); shmdt (б); Выход (0); } INT основных (INT ARGC, символ * ARGV []) {INT amount_serfs = 0, Идентификатор множества семафоров, я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_serfs = atoi (ARGV [1]); если (amount_serfs <1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? Барьер, 2); shmdt (б); Выход (0); } INT основных (INT ARGC, символ * ARGV []) {INT amount_serfs = 0, Идентификатор множества семафоров, я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_serfs = atoi (ARGV [1]); если (amount_serfs <1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_serfs = atoi (ARGV [1]); если (amount_serfs <1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? я, PID; key_t ключ; если (ARGC = 2!) {Е ( "Использование:% s amount_of_serfs amount_of_hackers \ п", ARGV [0]); вернуться -1; } Amount_serfs = atoi (ARGV [1]); если (amount_serfs <1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? 1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне? 1) {Е ( "% S: amount_of_serfs должен быть положительным числом больше нуля \ п.", ARGV [0]); вернуться -1; } Для (я = 0; я <amount_serfs; я ++) {если ((PID = вилка ()) <0) {PError ( "вилка"); вернуться -1; } Иначе, если (PID == 0) {a_serf (ARGV [0]); } Еще {}} возвращает 0,; } Может кто-то пожалуйста, помогите мне?
diegobe.
1

голосов
0

ответ
97

Просмотры

Run Python Interpreter Continuously as Unity3D C# Process

I'm trying to integrate a Python library into Unity3D. Unfortunately, I cannot use IronPython as I have to use a .pyd which is a result of a compilation of a C++ library using Boost Python. Thus, I simply wanted to keep a process running with a Python interpreter inside, and I would just synchronously call functions in the interpreter and read the output. I need the interpreter to stay alive as it will need to keep state over time. What I am trying to do does not work unfortunately, and I'm not sure what I am missing. var process = new System.Diagnostics.Process(); process.StartInfo.FileName = "python"; process.StartInfo.Arguments = "-i"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardInput = true; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); var input = process.StandardInput; var error = process.StandardError; var output = process.StandardOutput; string line; // This would ideally "purge" the initial output from Python, // even though for some reason it is terminating the process. Debug.Log("first output:"); while ((line = output.ReadLine()) != null) Debug.Log(line); Debug.Log("first error"); while ((line = error.ReadLine()) != null) Debug.Log(line); // Here I try to pass some commands to the Python interpreter. // Even if I remove the outputs from before, I only get // "invalid syntax errors" from Python. Debug.Log("Passing input"); input.WriteLine("print('test')"); // Try to read the 'test' output from Python. Debug.Log(output.ReadLine()); // Exit the interpreter input.WriteLine("exit()"); process.WaitForExit(); process.Close(); I think there's multiple errors in here, from the way I'm trying to "flush" the output of the Python process from the way I'm trying to pass the input, but I'm not sure what to do differently. EDIT: I think "flushing" the input by sending a couple of empty lines to Python fixes my input problems. On the other hand, it seems getting output synchronously from a running Process is impossible, as there is no non-blocking way to check if there is more output to read. Even Peek seems to hang. I'm still looking into it..
Svalorzen
1

голосов
1

ответ
21

Просмотры

Узел child_process.spawn: определить, когда все дочерние процессы порождали закрыты или завершены?

Есть ли способ, чтобы определить, когда все дочерние процессы порождали закрыты или завершены? Например, как я могу определить, что нет больше процессов для работы, или, другими словами, все мои 500 дочерние процессы вышли? для (пусть индекс = 0; индекс <500; индекс ++) {wkhtmltopdf = икру ( '/ USR / местные / бен / wkhtmltopdf', [ '--margin левый', '0', '$ {индекс} .html` , `$ {индекс} .pdf`]) wkhtmltopdf.stdout.on ( 'данные', (данные) => {console.log (` стандартный вывод: $ {данные} `)}) wkhtmltopdf.stderr.on ( 'данные », (данные) => {console.log (` STDERR: $ {данные} `)}) wkhtmltopdf.on ( 'закрыть', (код) => {console.log (` дочерний процесс завершился с кодом $ {код } `)})}
Sam Luther
1

голосов
1

ответ
159

Просмотры

WMI ConnectServer для ROOT \ cimv2 возвращает 'Access Denied' для применения C ++, но отлично работает для C # Применение

Я выполняю эту статью для запроса WMI. Интенция, чтобы получить подробную информацию о запущенных процессах с помощью запроса SELECT * FROM Win32_Process после того, как запрос завершается успешно, итерация по результату. Но во время разговора в pLoc-> ConnectServer (_bstr_t (L "\\ ROOT \\ CIMV2"), NULL, NULL, 0, NULL, 0,0, & pSvc); , Я получаю HRESULT_FROM_WIN32 (ERROR_SERVICE_DOES_NOT_EXIST): Указанная служба не существует в виде установленной службы. Я проверил разрешения по контролю WMI в compmgmt.msc и это, кажется, хорошо. Я попытался запустить приложение как администратор с тем же результатом. EDIT код HRESULT HRES; // Инициализировать COM. HRES = CoInitializeEx (0, COINIT_MULTITHREADED); если (невыполненным (HRES)) {соиЬ
Kartikkumar Rao
1

голосов
0

ответ
33

Просмотры

Я хочу знать, могу ли я открыть две трубы в одном процессе

я заканчивал C ++ задание, в моем дочернем процессе, я открыть две трубы, одна труба используется для получения стандартного ввода и один канал используется, чтобы получить стандартный вывод, потому что я хочу использовать стандартный ввод, чтобы генерировать выходной сигнал и перенаправить вывод в другой Дочерний процесс, поэтому я использую две трубы, но это всегда давит, когда я использую две трубы, я хочу знать, как это исправить? трубы (A1toA2); childpid2 = вилка (); если (childpid2 == 0) {dup2 (gentoA1 [0], STDIN_FILENO); закрыть (gentoA1 [1]); dup2 (A1toA2 [1], STDOUT_FILENO); близко (A1toA2 [0]); вернуть processA1 (); }
ellen
1

голосов
0

ответ
40

Просмотры

Process.Start doesn't start the process until main application is closed

У меня есть приложение WPF. При нажатии кнопки приложение «начинает» VLC с использованием метода Process.Start (). Я испытал это простое приложение на 2 компьютера: общественный класс MainWindow парциальное: Окно {... частная пустота RunVlcButtonClick (объект отправителя, RoutedEventArgs е) {строка applicationFile = «vlc.exe»; MainWindow.RunProcess (applicationFile); } Частных статических процессов RunProcess (строка applicationFile, строка аргументов = "") {Console.WriteLine ($ "Выполнить процесс: {applicationFile} {аргументы}"); Процесс процесса = MainWindow.GetProcess (applicationFile, аргументы); Результат BOOL = Process.Start (); если Console.WriteLine ($ "Не удается запустить {applicationFile} {аргументы}") (результат!); обратный процесс; } Частных статических процессов GetProcess (строка applicationFile, строка аргументов) {ProcessStartInfo ProcessStartInfo = новый ProcessStartInfo (applicationFile, аргументы); Process.StandardOutput StreamReader. processStartInfo.RedirectStandardOutput = TRUE; processStartInfo.RedirectStandardError = TRUE; processStartInfo.RedirectStandardInput = TRUE; processStartInfo.UseShellExecute = FALSE; processStartInfo.CreateNoWindow = TRUE; Процесс cmdProcess = новый процесс (); cmdProcess.StartInfo = ProcessStartInfo; cmdProcess.EnableRaisingEvents = TRUE; вернуться cmdProcess; }} Как вы можете видеть, в этом нет ничего нового или сложного. В первом компьютере работает нормально, но в другой запускаются экземпляры VLC, когда основное приложение закрыто. Первый компьютер под управлением Windows 10 Pro (сборка 16299) рабочего стола. Второй компьютер под управлением Windows 10 Enterprise (сборка 10240) ноутбука. Вы знаете, почему это происходит?
Jon
1

голосов
2

ответ
143

Просмотры

Реагировать родной: выполнение после запроса через 20 секунд, даже если приложение идет на Backgound

Когда приложение работает на переднем плане, я успешно выполнить пост-запрос с использованием SetTimeout с 20 секунд, как это: SetTimeout (функция () {/ * запрос POST делается здесь * /}, 20000); Хотя, если в то же время пользователь размещает приложения на фоне, нажав кнопку домой, например, то мой пост не уволят через 20 секунд. На Android, хотя, я проверил, что если 20 секунд получить прошло, а затем я открыть приложение (сделать это будет на переднем плане), то после выполняется немедленно. (Не проверял на КСН, чтобы увидеть, если то же самое происходит). Таким образом, у меня есть следующие вопросы: 1) То же поведение происходит на стороне IOS тоже? 2) Должен ли я ожидать, точно такое же поведение, если тайм-аут был 15 минут таймера, а не 20 секунд? 3) Как я могу решить эту проблему? Мне нужно связаться с конечной точкой по прошествии некоторого времени, и не может сделать это в то время как приложение работает в фоновом режиме с SetTimeout.
angelos_lex
1

голосов
0

ответ
95

Просмотры

Python: Как получить интерактивные процессы

Я хочу, чтобы все процессы, показывающие на Task Manager, приложения, я использую этот код, чтобы получить все процессы: WMIC процесса импорта подпроцесс CMD =»получить Caption, командным ProcessId ргос = subprocess.Popen (CMD, оболочки = True, стандартный вывод = subprocess.PIPE) для линии в proc.stdout: если b'Program»в строке: печать (строка) Как может я отчетливый между„фоновыми процессами“(с указанием менеджера задач) и„App“?
Gil Blinstein
1

голосов
1

ответ
46

Просмотры

Как я могу преобразовать зЬй :: процесс :: Command в строку командной строки?

Например: пусть ает ком = станд :: Процесс :: Команда :: новый ( «програм»); com.env ( "ENV_1", "VALUE_1") .arg ( "- это") .arg ( "Foo") .arg ( "- Ь") .arg ( "- аргумент = бар"); // Получить строку командной строки как-то здесь. com.output () разворачивать (). Это будет порождать процесс с этой командной строкой «програмом» -a -b Foo «--argument = с пространством», связанной с ним. Есть ли способ, чтобы получить это обратно от объекта ком?
Prime_Aqasix

Просмотр дополнительных вопросов

Связанные вопросы