#include<stdio.h>
#include<stdlib.h>
void main(){
exit(0);
}
這是我的代碼在C我怎麼能讓控制檯退出??我曾嘗試使用exit函數,但現在看來似乎不起作用如何使用退出函數使c控制檯程序退出?
#include<stdio.h>
#include<stdlib.h>
void main(){
exit(0);
}
這是我的代碼在C我怎麼能讓控制檯退出??我曾嘗試使用exit函數,但現在看來似乎不起作用如何使用退出函數使c控制檯程序退出?
假設您試圖退出控制檯,您必須獲取父進程ID(getppid
),然後發送kill信號。
在Windows中,您必須通過調用Process32First和Process32Next來複制getppid
的行爲。殺死成爲TerminateProcess
你不能...程序以退出(0)結束;在退出碼返回給調用...通常一個命令解釋器外殼....通常終端
終端中運行將關閉如果它終止程序....你可以直接在一個運行程序終端,或者使用shell執行只是一個命令
似乎無法追查的線索,但年前我試着回答通過建議system("exit")
一個新聞論壇這個問題(這是不行的,當然)。但是當時(20世紀90年代中期)的正確答案是將軟件中斷髮送到重啓。受保護模式的DOS(Windows窗口中的Dos)會攔截它並關閉窗口。
如果您希望程序始終在出口處關閉,您可以編輯快捷方式屬性。
#define _WIN32_WINNT 0x500
#include <windows.h>
...
PostMessage(GetConsoleWindow(), WM_CLOSE, 0, 0);
不知道這是否有效,但它是首先想到的。您可以用WM_DESTROY替代WM_CLOSE。
你永遠不會發送'WM_DESTROY'消息。相反,嘗試調用'DestroyWindow(GetConsoleWindow())',看看會發生什麼...... – rodrigo
您無法使用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()
標記來獲得要終止進程的句柄,然後最終調用TerminateProcess()
來終止進程。
編輯: [不起作用,因爲系統啓動子shell]看來你可以用system
實現它通過調用簡單system("exit");
。
'system()'啓動一個子shell。 –
有趣......我不知道,謝謝! –
當我第一次瞭解它時,我也很驚訝。但是,當您記住C和控制檯應用程序的單線程本質時,這是有道理的。 –
要退出控制檯,必須進行系統調用。這將是
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("taskkill/IM cb_console_runner.exe");
{
這裏,cb_console_runner.exe是進程名。
我認爲你試圖解決錯誤的問題。運行程序的* console *(或shell)完全獨立於程序本身,它僅提供用戶I/O接口。試圖殺死控制檯聽起來像不好的設計 - 相反,你應該啓動該程序而不將其附加到一個(這在Unix環境中很容易,但對於Windows而言更復雜) – Thomas