司马乂自从挟持了晋惠帝后,开始独揽大权,他的另外一个死对头河间王司马颙心怀不满,于是多次派人刺杀司马乂,但司马乂是武将出身,功夫了得且保卫森严,刺客的行刺都没有成功。
太安二年(公元303年),司马颙令部将张方领兵七万与成都王司马颖的二十多万大军以清君侧为名,起兵攻打洛阳。
晋惠帝下诏,令司马乂为大都督,兴兵迎击。双方战事僵持数月,期间司马乂曾攻破司马颙、司马颖军,斩杀数万人,但最终因战事太久,司马乂军粮食缺乏。
洛阳久攻不下,张方认为难以取胜,建议班师回长安,被司马颙否决。司马颙撤换主帅,令朝廷内任职司空的东海王司马越领兵继续与司马乂作战。
永兴元年(公元304年)初,司马越乘司马乂军疲惫,勾结一些禁军将领,夜里潜入大营,捕获司马乂。事后司马越为邀功将司马乂交给了司马颙的部将,司马乂宁死不从,被人用火烤死。
司马颖在朝野向来很有威望,而且军事实力不输司马乂,入洛阳后即被增封二十郡,拜丞相。河间王司马颙也官升太宰,东海王司马越升为尚书令。司马颙上表晋惠帝,认为司马颖更应该成为皇位继承人,请惠帝废除皇太子司马覃,以司马颖为皇太弟,丞相位置不变。
司马越对河间王倒行逆施的行为十分不满,他私闯皇宫,挟持晋惠帝,集结十多万大军攻打邺城,讨伐司马颙。
双方在荡阴决战。司马越兵败逃跑,晋惠帝被俘虏。
司马越兵败时,先逃到下邳,当时的徐州都督、东平王司马楙将他拒于城门外,司马越只好逃回其封地东海国。司马颖以同是宗室的名义,派使者到东海,宽恕司马越,要招他回朝,但司马越不应命。
司马越兵败后,其亲弟并州刺史东瀛公司马腾及王浚为策应司马越,杀死了司马颖所置的幽州刺史和演。
司马颖听闻司马腾起兵造反,出兵讨伐司马腾。
当时并州云集了很多胡人势力,尤其以乌丸、羯朱最为强大。司马腾暗中勾结这两支胡人势力,攻击司马颖。作为回应,司马颖派遣新任幽州刺史王斌与石超、李毅等人抵抗司马腾,但三路大军皆被半路突然杀出的羯朱骑兵打败。
失败的消息很快传到邺城,人心惶惶,官僚士兵相续逃跑。司马颖甚是恐慌,与几十个将军带着晋惠帝连夜逃到洛阳。
洛阳此时由张方控制,司马颖要张方保护晋惠帝,张方阳奉阴违,将晋惠帝挟持。司马颖到长安搬救兵,司马颙得知消息,当即废除司马颖的皇太弟之位,要他离开回封地。张方将惠帝送给司马颙,司马颙又让晋惠帝下诏,要立远在东海的司马越为太傅,要他回朝与自己共同辅政,但司马越还是不肯接受。
次年,司马越得知司马颙要罢免自己,一面起兵抵抗,一面派人游说,只要司马颙送帝还都,就与司马颙分陕而居。
司马颙与他的这个堂兄弟僵持不下,本想听从,但张方却不同意,他说:“主公,我麾下还有将士十万余众,司马越那个缩头乌龟不过是虚张声势,必然不会真的威胁到我们。末将可以亲自送皇帝回到洛阳宫中,以堵司马越之口,然后再让司马颖回邺城掌权,主公可留守关中,末将出兵北伐博陵。等局势稳定,天下就再也没有帮助司马越的人了。”
司马颙不赞同张方的提议,他说:“皇帝不能离开,我要亲自督战,不必等到局势稳定。”他命令豫州刺史刘乔为镇东大将军,派遣司马颖率领楼褒、王阐等人,占据河桥以抗拒司马越。
司马越见司马颙软硬不吃,决定挂帅出征,以挫其锋芒。他率领三万士兵,西进到了萧县,刘乔派遣其儿子刘祐带兵抗拒司马越,双方发生激战,司马越军战败。
这时范阳王司马虓派遣督护田徽以八百骑兵帮助司马越,在谯郡境内与刘祐军相遇,一战之下,刘祐众溃,司马越得以进屯阳武。
消息传到长安。司马颙非常害怕,恰好张方这时又请求出兵,便假装答应,暗中收买张方的亲信将领郅辅。郅辅被收买后,在夜里进入军营,将司马颙的文书呈给张方看,然后拔刀砍下他的首级献给司马颙。
司马颙派人把张方的头颅送到司马越军中,声称是张方从中作梗,离间他们兄弟感情,认为这样可以平息祸乱。但很快司马颙又后悔,怪罪郅辅杀张方,又派人杀了郅辅。
张方的死对司马颙非常不利。范阳王司马虓从官渡渡河,其司马刘琨把张方头颅给荥阳守将吕朗看,吕朗马上献出城池投降。刘琨故技重施,又击破石超,攻占许昌,在萧县大败刘乔,迫使刘乔逃奔南阳。
司马越军中有很多胡人,其中以鲜卑将领祁弘为首的胡人军队在后来攻破潼关,进入关中,让司马颙大为恐惧,火速派遣马瞻、郭传等在灞水抗拒司马越军。
两军交战,马瞻军战败,司马颙无人可用,只好单骑出长安,逃到太白山。
至此,帝都长安成为司马越囊中之物。司马越为了奖励祁弘等人,纵容鲜卑部队在城中大肆劫掠,屠杀两万余人,其中有相当多的是手无寸铁的百姓,暴行令人发指。
而在驻守河桥的司马颖军方面,有支持司马越的安北将军王浚,他派遣督护刘根率领三百骑兵挺进至河上。敌将王阐出战,被刘根在阵前斩杀。
司马颖闻讯,决定收缩兵力,固守河桥。范阳王司马虓见司马颖败退,派出鲜卑的骑兵与平昌公司马模麾下的步兵等万余人袭击河桥,楼褒军溃败,向西逃亡,追兵一直追到新安,沿途又死了很多人,战况惨烈。
光熙元年(公元307年)十一月,晋惠帝司马衷驾崩。同年,惠帝异母弟司马炽继位,是为晋怀帝。次年,改元永嘉,大赦囚犯,废除诛三族刑。太傅、东海王司马越奉诏辅政,掌握了朝廷大权。至此,东海王司马越在八王之乱中成为了最终的胜利者。