#include<stdio.h>
#include<stdlib.h>
void main(){
exit(0);
}
这是我在 c 中的代码我怎样才能让控制台退出?我尝试使用退出功能,但似乎它不起作用
#include<stdio.h>
#include<stdlib.h>
void main(){
exit(0);
}
这是我在 c 中的代码我怎样才能让控制台退出?我尝试使用退出功能,但似乎它不起作用
exit
导致您的程序退出,而不是您运行它的 shell。您的程序相当于:
int main(void)
{
return 0;
}
你可能想调查一下kill(2)
。
编者按:main
应该返回int
,不是void
。
您无法使用 关闭父应用程序exit
。Exit
仅导致您的程序退出。
如果要退出父应用程序:
在 UNIX 系统上,您可以Kill(2)
与getppid(2)
.
在 Windows 上,您可以使用TerminateProcess
. 这是有关如何GetParentProcess的示例。但是在 Windows 上,我不确定你是否可以,我认为你无权杀死父进程。看这里: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms684880 (v=vs.85).aspx
似乎您可以获得终止 Windows 进程的特权:
这篇知识库文章描述了如何做到这一点。您首先调用
SeDebugPrivilege()
以获取终止进程的权限,然后OpenProcess()
使用PROCESS_TERMINATE
标志调用以获取要终止的进程的句柄,最后调用TerminateProcess()
以终止进程。
编辑:
[不起作用,因为系统启动了一个子外壳]似乎你可以system
通过调用来实现它system("exit");
。
假设您试图退出启动进程的控制台,您必须获取父进程 id ( getppid
),然后发送终止信号。
getppid
在 Windows 中,您必须通过调用Process32First和 Process32Next来复制行为。杀变成TerminateProcess
你不能...程序以 exit(0) 结束;将退出代码返回给调用者……通常是命令解释器外壳……通常在终端内运行
如果其中的程序终止,终端将关闭....您可以直接在终端内运行程序,或使用 shell 只执行一个命令
似乎无法追踪该线程,但几年前我试图通过建议在usenet论坛上回答这个问题system("exit")
(当然,这不起作用)。但当时(1990 年代中期)的正确答案是发送软件中断以重新启动。保护模式 DOS(Windows 窗口中的 Dos)会拦截它并关闭窗口。
如果您希望程序始终在退出时关闭,您可以编辑快捷方式属性。
#define _WIN32_WINNT 0x500
#include <windows.h>
...
PostMessage(GetConsoleWindow(), WM_CLOSE, 0, 0);
不确定这是否有效,但这是首先想到的。您可以用 WM_CLOSE 代替 WM_DESTROY。
为了从控制台退出,您必须进行系统调用。这将是
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("taskkill/IM cb_console_runner.exe");
{
这里,cb_console_runner.exe 是进程名。