#include<stdio.h>
#include<stdlib.h>
void main(){
exit(0);
}
这是我在c中的代码怎么能让控制台退出?我试图使用退出功能但看起来它不起作用
答案 0 :(得分:3)
exit
导致您的程序退出,而不是您运行它的shell。您的计划相当于:
int main(void)
{
return 0;
}
您可能需要查看kill(2)
。
编辑说明:main
应该返回int
,而不是void
。
答案 1 :(得分:2)
您无法使用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进程的权限:
This knowledge base article描述了如何做到这一点。首先调用
SeDebugPrivilege()
以获取终止进程的权限,然后使用PROCESS_TERMINATE
标志调用OpenProcess()
以获取要终止的进程的句柄,最后调用{ {3}}终止进程。
修改强>
[因系统启动子shell而无效] 您似乎可以通过system("exit");
调用TerminateProcess()
来实现它。
答案 2 :(得分:1)
假设您尝试退出控制台,则启动了该过程,您必须获取父进程ID(getppid
),然后发送kill信号。
在Windows中,您必须通过调用Process32First和Process32Next来复制getppid
的行为。杀死变为TerminateProcess
答案 3 :(得分:0)
你不能......程序以exit(0)结束;将exitcode返回给调用者...通常是一个命令解释器shell ....它通常在终端内运行
如果终端中的程序终止,终端将关闭....你可以直接在终端内运行你的程序,或者使用shell只执行一个命令
答案 4 :(得分:0)
似乎无法追踪线程,但多年前我试图通过建议system("exit")
在usenet论坛中回答这个问题(当然这不起作用) 。但当时(20世纪90年代中期)的正确答案是将软件中断发送到 reboot 。保护模式DOS(Windows窗口中的Dos)将拦截它并关闭窗口。
如果您希望程序始终在退出时关闭,则可以编辑快捷方式属性。
答案 5 :(得分:0)
#define _WIN32_WINNT 0x500
#include <windows.h>
...
PostMessage(GetConsoleWindow(), WM_CLOSE, 0, 0);
不确定这是否有效,但这是首先想到的。您可以改为将WM_CLOSE替换为WM_DESTROY。
答案 6 :(得分:0)
要退出控制台,您必须进行系统调用。它将是
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("taskkill/IM cb_console_runner.exe");
{
此处,cb_console_runner.exe是进程名称。