我正在创建一个操作系统,并使用 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;
,但没有成功,进程仍在运行。
TerminateProcess()
来终止进程。如果调用者拥有足够的权限,这样做将终止目标进程。这适用于任何进程,而不仅仅是子进程。
CreateProcessW()
是如何工作的。该文档详细解释了语义。特别是返回值与相关代码的假设不同。