盧誌勸司馬穎奉惠帝還洛陽,當時還有甲士一萬五千多人,逃跑時做護衛還綽綽有餘。黎明時分,司馬穎生母程太妃眷戀鄴城,遲遲不願起身,“(司馬)穎狐疑未決”。萬餘大軍見主帥無謀,一哄而散,司馬穎和盧誌隻帶數十騎擁著惠帝乘犢車南奔洛陽,狼狽不堪。逃至邙山,張方率萬騎精兵迎謁,“(張)方將拜謁,帝下車自止之”。堂堂皇帝,雖傻乎乎也覺察到自己如今連一個將軍的跪拜也承受不起了。惠帝入返洛陽後,張方擁兵專治朝政,成都王司馬穎喪失前權,形同軟禁。
張方所部士兵大多從長安來,一直把京城當作大肥肉,在洛陽剽掠搜刮,都吵嚷著要“奉帝遷都長安”。他們以請惠帝出郊拜謁陵廟為由,想把惠帝和群臣騙出城。惠帝不願再顛簸,不答應出城。張方於是率大批軍士披甲執兵入殿,搜出躲在後園竹林裏的惠帝,逼使上車,“帝垂泣從之”。於是,張方軍士在後宮大肆奸汙宮女,搶劫珍寶。張方還想一把火把宮室和宗廟燒毀以絕人望,盧誌勸他:“董卓無道,焚燒洛陽,怨毒之聲,百年猶存,何為襲之!”張方這才作罷。
張方挾持惠帝、成都王司馬穎以及惠帝另一個弟弟豫章王司馬熾到長安,河間王司馬甬就暫時成為西晉王朝真正的主人。河間王讓惠帝下詔廢掉司馬穎的皇太弟身份,改立豫章王司馬熾為皇太弟。惠帝永興二年(公元305年)七月,東海王司馬越喘定之後,又以張方和河間王司馬甬“劫甬車駕”為罪名,發檄天下討伐河間王。成都王司馬穎的舊部也紛紛在河北起兵。見山東、河北等地兵起,河間王“甚懼”,就又封原來和自己一個戰壕現在又被自己軟禁的司馬穎為鎮軍大將軍,派盧誌和千餘兵擁他一起返歸河北招撫。
成都王司馬穎此時兵馬衰弱疲極,早已喪盡昔日手下數十萬熊虎大軍的威風。東海王司馬越東山再起之勢勃然,一路進兵順利,軍近洛陽。眼見一天不如一天,河間王司馬甬想與司馬越言和。由於張方自己有“劫駕之罪”,怕二王和解後對自己不利,堅決表示反對。河間王便遣張方的老友郅輔以送信為名,趁張方讀信時一刀砍下了這位驕橫將領的腦袋。
本以為殺了張方後,東海王司馬越會許和退兵,但政治鬥爭向來是“得寸進尺”,東海王司馬越繼續西進。當時攜殘兵駐洛陽的成都王司馬穎在洛陽也站不住腳,狼狽敗向華陰,中途聽說河間王和東海王有言和之勢,如五雷轟頂,不知何去何從。兩王如果講和,成都王自己肯定會被當作犧牲品幹掉。
公元306年5月,東海王的將軍祁弘攻入關中,連敗河間王司馬甬的軍隊,司馬甬本人也跑進太白山中。當時百官散走,在山穀中拾采橡食充饑。祁弘軍攻入長安後,部下的鮮卑軍人縱情大掠,殺掉兩萬多人。祁弘搶到惠帝後,又擁著皇帝還洛陽。河間王又趁機奪回長安城,但關中地區都臣服於司馬越,因為惠帝在司馬越手中,河間王僅保有長安一城。
公元306年7月,惠帝又回到舊都洛陽,改元光熙。每經一次劫難,惠帝就被迫改一次年號,這也是西晉“八王之亂”的一大特色。
東海王司馬越擁大軍入駐洛陽後,被委任為太傅、錄尚書事(實際上是自己委任自己),並以自己的親宗堂兄範陽王司馬虓為司空,鎮軍鄴城。封進攻成都王甚有“功勞“的王浚為驃騎大將軍,都督東夷、河北諸軍事,領幽州刺史。
惶惶在外的成都王司馬穎聽說東海王兄弟已經控製了京城,便想從華陰往武關方向逃跑。行至新野縣,東海王已經以惠帝名義下詔搜捕。惶急之間,司馬穎也顧不上老母妻子,隻和一個禦車的兵士單車載著兩個小兒子渡過黃河跑到朝歌,又召集了從前的屬下數百人,想投奔老部下公師藩。沒走多遠,範陽王司馬虓屬下把司馬穎等人一網打盡,關在鄴城監獄裏。“範陽王(司馬)虓幽之,而無他意。”估計司馬虓對這位惠帝親弟弟沒什麼毒怨,不打算害他性命。不巧的是,範陽王忽然暴疾而死,他手下長史劉輿知道司馬穎從前一直在鄴城坐鎮,聲名不錯,怕有人再趁機劫持他又生後患,便派人假稱台使,“稱詔夜賜(司馬)穎死”。
在最後的時刻,這位年青貌美的王爺倒很鎮靜。讀畢“詔書”,他問監守田徽:“範陽王死了嗎?”田徽答說:“不知道。”這一問一答很有意思。見有賜死自己的詔書,司馬穎就猜到範陽王已死,田徽作為辦公人員,也不好透露消息。司馬穎又問:“您今年多大?”田徽答“五十歲。”司馬穎問:“知天命了嗎?”(孔子說自己“五十而知天命”),田徽說:“不知道。”麵對這位冷忍無情的監察人員,王爺也無可奈何,與這樣的人不可能深談下去。司馬穎自歎道:“我死之後,天下安乎不安乎?我自放逐,於今一年,身體手足不見洗沐,取數鬥湯來!”魏晉風度,在這麼一個臨死的王爺身上也可窺見一斑。
司馬穎的兩個兒子在一旁驚恐大哭,王爺知道憐子無益,揮手讓人把兩個小孩子帶走,以免讓他們看見自己的死狀。洗沐已畢,“乃散發東首臥”,自己躺倒,命田徽把自己縊死,時年28。“二子亦死,鄴中哀之”。