人這一生都會經過出生、生長、死亡這幾個階段,出生就意味著必須面對死亡。故佛學經典中常有空即是色、色即是空,生就是死、死就是生這些深奧的佛義。縱觀這世間的一切又何嘗不是這樣。海龜可以說是長壽的動物了,經常可以看到報說某只海龜活了幾千年,但地球自從誕生生物以來又何止幾千年了。在前面,進程已經被啟動起來了,也已經在跑了,現在還有一個過程它也是必須經歷的了那就是死亡了。本人覺得寫這個進程死亡這個題目有點沉重,人總是希望聽到生長有關的,而不愿聽到諸如一些灰色的詞語。至少對于我來說是這樣的了,本想起標題為進程的退出,或者進程的隱藏但覺總不得體。退出含有一種自愿性的離開之意,但有時的情況卻往往不會是這樣的,比如我們通過任務管理器來終止一個應用程序,這時我想它就是非自愿的動作了。還有一促極端的情況,電腦掉電了。隱藏這個詞語就有更不貼切的地方,還有隱藏這個詞對進程來說是它確實存在的一種狀態,這將更為復雜。故起名為進程死亡一題,前也說過死亡有正常死亡,壽終正寢、及意外死亡這兩種。
正常死亡,壽終正寢指的是進程完成了它的工作,它走到了它生命的盡頭。于是穿過一個花括號,好似穿過一片淡薄的白云而登仙樂。
如下的一個簡單的例子。
#include <iostream.h>

int main()


{
int i=2;
if(2==i)

{
i++;
}
return i;
}
上面這個例子就會在執行完return i;之后的"{"壽終正寢。沒有執行完這個花括號就不能算作壽終正寢。比如說這時有一個高優先級的線程取得了CPU的使用權,并用將這個進程殺死掉。
進程的意外死亡可以有自己來操縱也可以是外部使力而使它突然終止。進程要殺死自己很簡單,只要調用ExitProcess就行了。這個函數功能是很強,以致有些霸道。會使進程來不及釋放有關的資源比如用new操作符申請的一段內存,調用了第三組件而不能再去為第三方的組件執行一個Release 這樣的通知。這樣引起的問題似乎相當不妙。幸好這個進程的內核對象會隨著它的死亡而減少引用計數或者被收回。所以使用這個函數時還是三思而行,應盡量避免。那么外部的一個線程又該如何終止進程呢?這得用TerminateProcess這個函數了,想說的是這個函數象前面的函數一樣也是立即終止一個進程,而不會給被終止的進程留一口氣。上述這兩種方法用起來還是三思為好。對于有窗口的應用程序有更漂亮的方法來讓它退出,找到這個進程的窗口,然后對著這個窗口發一個退出的消息。這樣就比較文明了,因為有機會給程序做一些善后的工作。如下的程序就可以終止你已經開啟的計算器程序。
#include "stdafx.h"
#include <windows.h>
#include <iostream.h>

int main(int argc, char* argv[])


{
DWORD dwCurrentId,dwControlId;
dwCurrentId=GetCurrentProcessId();
cout<<"Current process Id: "<<dwCurrentId<<endl;
HWND hwnd=FindWindow("SciCalc",NULL);
GetWindowThreadProcessId(hwnd,&dwControlId);
HANDLE controlHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwControlId);
cout<<"Calc Process Id :"<<dwControlId<<endl;
//PostMessage(hwnd,WM_QUIT,0,0);
TerminateProcess(controlHandle,0);
return 0;
}

我注釋掉的post方法就是文明終止進程的例子。
當我玩游戲過了通關時,只能自豪地看著我操控的角色穿著金色的戰衣,神采飛揚地面對著東方徐徐升起的太陽幾分鐘。而后機器又恢復到了啟動的狀態,這一切也就過去了。我也得趕快返回學校去上晚自習。但是這里的并不是我玩游戲的所有樂趣,真的樂趣還是在戰斗的過程中。進程的吸引人也不會只這么一點,還有更精采的將要上演........。