2013-07-14 42 views
1
#include<stdio.h> 
#include<stdlib.h> 

void main(){ 

    exit(0); 

} 

這是我的代碼在C我怎麼能讓控制檯退出??我曾嘗試使用exit函數,但現在看來似乎不起作用如何使用退出函數使c控制檯程序退出?

+0

我認爲你試圖解決錯誤的問題。運行程序的* console *(或shell)完全獨立於程序本身,它僅提供用戶I/O接口。試圖殺死控制檯聽起來像不好的設計 - 相反,你應該啓動該程序而不將其附加到一個(這在Unix環境中很容易,但對於Windows而言更復雜) – Thomas

回答

3

exit原因程序退出,而不是你從中跑出來的外殼。您的程序相當於:

int main(void) 
{ 
    return 0; 
} 

您可能想要查看kill(2)

編者按:main應該返回int而不是void

+0

我認爲kill只是Unix。詢問「控制檯」而不是「外殼」意味着Windows。 – ugoren

+0

你知道如何在Windows上做到這一點嗎? –

+0

不是。我只是認爲這是他想要的。 – ugoren

1

假設您試圖退出控制檯,您必須獲取父進程ID(getppid),然後發送kill信號。

在Windows中,您必須通過調用Process32First和Process32Next來複制getppid的行爲。殺死成爲TerminateProcess

0

你不能...程序以退出(0)結束;在退出碼返回給調用...通常一個命令解釋器外殼....通常終端

終端中運行將關閉如果它終止程序....你可以直接在一個運行程序終端,或者使用shell執行只是一個命令

0

似乎無法追查的線索,但年前我試着回答通過建議system("exit")一個新聞論壇這個問題(這是不行的,當然)。但是當時(20世紀90年代中期)的正確答案是將軟件中斷髮送到重啓。受保護模式的DOS(Windows窗口中的Dos)會攔截它並關閉窗口。

如果您希望程序始終在出口處關閉,您可以編輯快捷方式屬性。

0
#define _WIN32_WINNT 0x500 
#include <windows.h> 

... 
PostMessage(GetConsoleWindow(), WM_CLOSE, 0, 0); 

不知道這是否有效,但它是首先想到的。您可以用WM_DESTROY替代WM_CLOSE。

+1

你永遠不會發送'WM_DESTROY'消息。相反,嘗試調用'DestroyWindow(GetConsoleWindow())',看看會發生什麼...... – rodrigo

2

您無法使用exit關閉父應用程序。 Exit只會導致您的程序退出。

如果你想退出父應用:

+1

'system()'啓動一個子shell。 –

+0

有趣......我不知道,謝謝! –

+0

當我第一次瞭解它時,我也很驚訝。但是,當您記住C和控制檯應用程序的單線程本質時,這是有道理的。 –

0

要退出控制檯,必須進行系統調用。這將是

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    system("taskkill/IM cb_console_runner.exe"); 
{ 

這裏,cb_console_runner.exe是進程名。

資源:http://en.wikipedia.org/wiki/Kill_(command)

相關問題