Выполнение эквивалентного из “Уничтожает Дерево Процесса” в C++ на окнах

Это может быть достигнуто с помощью одного объекта или массива объектов. Преимущество использования массива объектов состоит в том, что вы можете выполнять итерации по нему и создавать список элементов или структуру таблицы и т. Д.

// using an object

var MYDATA_OBJ= {
  FIRST_ELEMENT: {
    ABCKEY1: 'value 1.1',
    ABCKEY2: 'value 1.2',
    ABCKEY3: 'value 1.3'
   },
  SECOND_ELEMENT: {
    ABCKEY1: 'value 2.1',
    ABCKEY2: 'value 2.2',
    ABCKEY3: 'value 2.3'
   }
 };


console.log(MYDATA_OBJ.FIRST_ELEMENT.ABCKEY2); // gives value1.2
console.log(MYDATA_OBJ.SECOND_ELEMENT.ABCKEY3); // gives value2.3

// to alter the value of a given element the syntax would be 
MYDATA_OBJ.FIRST_ELEMENT.ABCKEY2 = 'newValue1.2';
console.log(MYDATA_OBJ.FIRST_ELEMENT.ABCKEY2); // gives newValue1.2

// using an array

var MYDATA_ARR= [{
    ABCKEY1: 'value 1.1',
    ABCKEY2: 'value 1.2',
    ABCKEY3: 'value 1.3'
   }, {
    ABCKEY1: 'value 2.1',
    ABCKEY2: 'value 2.2',
    ABCKEY3: 'value 2.3'
   }
 ];


console.log(MYDATA_ARR[0].ABCKEY2); // gives value1.2
console.log(MYDATA_ARR[1].ABCKEY3); // gives value2.3


// to alter the value of a given element the syntax would be 
MYDATA_ARR[0].ABCKEY2 = 'newValue2.2';
console.log(MYDATA_ARR[0].ABCKEY2); // gives newValue2.2

15
задан Gama11 14 April 2019 в 16:04
поделиться

5 ответов

Вы могли бы хотеть рассмотреть "API Заданий". CreateJobObject и друзья. Можно осуществить дочерние процессы для пребывания в Задании путем установки соответствующего атрибута. Тогда можно звонить TerminateJobObject каждый раз, когда Вы хотите.

Разъяснение: это не то, что делает Диспетчер задач.

20
ответ дан 1 December 2019 в 01:53
поделиться

Я предлагаю идти путем объекта задания, как обозначено выше, это будет самым надежным.

, Если Вы не можете пойти путем объекта задания, можно использовать toolhelp API, чтобы получить идентификатор родительского процесса и создать дерево тот путь. Будьте осторожны, хотя, так как Windows не имеет прочных родительских/дочерних отношений, и для PID возможно быть переработанным. Можно использовать GetProcessTimes, чтобы запросить время создания процесса и проверить, что это является более старым, чем ребенок. Если промежуточный процесс в дереве будет завершен, то Вы не будете в состоянии обойти дерево далее.

// Error handling removed for brevity
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);
Process32First(snapshot, &process);
do
{
    // process.th32ProcessId is the PID.
    // process.th32ParentProcessID is the parent PID.

} while (Process32Next(snapshot, &process));
6
ответ дан 1 December 2019 в 01:53
поделиться

Существует функция Win32, вызванная TerminateProcess () . Это должно сделать задание для Вас.

, С другой стороны, я нашел, что команда taskkill полезна для вещей как это.

из командной строки:

taskkill /F /T /IM program.exe

от кода:

system("taskkill /F /T /IM program.exe");

другие переключатели (прямо от taskkill/?):

 TASKKILL [/S system [/U username [/P
 [password]]]]
          { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]

 Description:
     This command line tool can be used to end one or more processes.
     Processes can be killed by the process id or image name.

 Parameter List:
     /S    system           Specifies the remote system to connect to.

     /U    [domain\]user    Specifies the user context under which
                            the command should execute.

     /P    [password]       Specifies the password for the given
                            user context. Prompts for input if omitted.

     /F                     Specifies to forcefully terminate
                            process(es).

     /FI   filter           Displays a set of tasks that match a
                            given criteria specified by the filter.

     /PID  process id       Specifies the PID of the process that
                            has to be terminated.

     /IM   image name       Specifies the image name of the process
                            that has to be terminated. Wildcard '*'
                            can be used to specify all image names.

     /T                     Tree kill: terminates the specified process
                            and any child processes which were started by it.

     /?                     Displays this help/usage.

- Джон

5
ответ дан 1 December 2019 в 01:53
поделиться

Вы хотите найти идентификатор процесса для процесса, который Вы хотите уничтожить, затем "обходят дерево" его детей (и их дети, и так далее...), отметьте их pids и затем уничтожьте все хорошие процессы и быстро.

1
ответ дан 1 December 2019 в 01:53
поделиться

Можно также использовать WMI, маршрут, планируя Вас может создать класс для выполнения задач.
Se это , "Где я могу найти документацию WMI?"
и библиотека COM WMI
и Примеры Приложения C++ WMI

0
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

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