有没有结束子进程的函数?

问题描述 投票:0回答:1

我正在创建一个操作系统,并使用 C 和以下代码创建了一个子进程:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <windows.h>

int main() {
    FILE *fptr;

    // Open a file in read mode
    fptr = fopen("filename.txt", "r");

    // Store the content of the file
    char myString[100];
    fgets(myString, 100, fptr);
    fclose(fptr);
    PROCESS_INFORMATION ni;
    STARTUPINFO li;
    ZeroMemory(&li, sizeof(li));
    li.cb = sizeof(li);

    if (CreateProcess(NULL, "child_process.exe", NULL, NULL, FALSE, 0, NULL, NULL, &li, &ni)) {
        // Parent process
        WaitForSingleObject(ni.hProcess, INFINITE);
        CloseHandle(ni.hProcess);
        CloseHandle(ni.hThread);
    } else {
        // Child process
    }
    
    pid_t pid = getpid();
    printf("(%d) WARNING: These processes are vital for the OS:\n", pid);
    printf("(%d) %d\n", pid, pid);
    printf("(%d) %s\n\n\n", pid, myString);
    return 0;
}

而且我无法结束子进程。 我不想使用信号,因为它们太复杂,而且我是初学者。

我尝试使用

return 0;
,但没有成功,进程仍在运行。

c winapi operating-system kill-process
1个回答
0
投票

您可以通过调用

TerminateProcess()
来终止进程。如果调用者拥有足够的权限,这样做将终止目标进程。这适用于任何进程,而不仅仅是子进程。

但是在你去那里之前,你首先需要了解

CreateProcessW()
是如何工作的。该文档详细解释了语义。特别是返回值与相关代码的假设不同。

© www.soinside.com 2019 - 2024. All rights reserved.