司马伦与司马囧联手除掉贾南风之后,中央可谓群龙无首。张华、裴頠、贾谧相继被杀,朝廷也失去了中枢。此时的惠帝司马衷年满40岁,但这位皇帝对朝局没有任何掌控能力,形似傀儡。司马伦矫诏,自任使持节大都督、都督中外诸军事、相国,侍中。
西晋时掌握兵权的官职,都督诸军为上,兼诸军次之。使持节为上,持节次之,假节为下。可见司马伦当时已权倾朝野,可号令天下。而司马囧仅被任命为四品游击将军,他自恃有功,对此很不满意。孙秀敏锐地察觉到司马囧的怨气,害怕他在内朝作乱,建议司马伦赶紧让他出朝去地方任职。司马伦深以为然,就让齐王司马囧出镇许昌。许昌是洛阳的门户重镇,当年曹操就是坐镇许昌,狭天子以令诸侯。司马伦让一个对自己心怀不满的藩王镇许昌,可见他是一个无战略眼光的庸才。
不仅是庸才,更是一个的蠢才——就在次年正月(公元301年),司马伦竟公然将惠帝幽禁到金镛城,篡夺了帝位。当年,董卓进京,仅是换了位皇帝,就被十八路诸侯共讨。袁术悍然称帝,马上成为众矢之的,不到两年光景就成了孤家寡人。曹操何等英雄,只也能奉天子以令不臣。司马伦何德何能,胆敢如此狂妄!
三月,镇许昌的司马囧率先起兵,联合镇邺的成都王司马颖、镇关中的河间王司马颙共同讨伐司马伦,另外长沙王司马乂、新野公司马歆、兖、豫二州都举兵响应。帝都洛阳城内一片惊恐,左卫将军王舆与尚书广陵公司马漼乘机带兵入宫,杀了司马伦及其党羽。四月。惠帝复位。拜司马冏为大司马,都督中外诸军事,加九锡。任命司马颖为大将军,录尚书事。司马颙为太尉。司马乂为骠骑将军。司马冏进入洛阳时,甲士数十万,旌旗器械之盛大,京师为之震动。司马颖的左长史卢志,劝他推崇齐王司马冏,徐结四海之心。司马颖采纳了,以母亲病重为借口回到邺城,于是司马冏独揽大权。史书记载:
大筑第馆,不入朝见。坐拜百官,符敕三台,选举不均,惟宠亲昵。朝廷侧目,海内失望。
司马乂不满司马囧专权,劝司马颖起兵取而代之。李含得到这个消息,对司马颙说:“让长沙王去讨伐齐王司马冏,司马囧必先杀掉司马乂,再传檄文列举齐王的罪过,废掉齐王拥立成都王。”司马颙上表请废掉司马冏,让司马颖辅政。拜李含为都督,统领张方等去洛阳。传檄让司马乂讨伐司马冏。司马乂率领身边百余人疾驰宫中,关闭所有大门,以天子的名义擒囧杀之。惠帝拜司马乂为太尉,都督中外诸军事。
司马颙原本的意图是认为司马乂弱,司马冏强。希望司马乂能被司马冏杀死,再以司马乂为理由,宣告四方,共同讨伐司马囧,废掉惠帝立成都王颖,自己做宰相,专制天下。结果事与愿违,司马冏反被司马乂杀了,司马乂入朝辅政。司马颙的计划失败。
此时,坐镇邺城的司马颖实力最强。朝中大小事务,皇帝都会派人去邺城问他的意思,可谓遥掌朝政。只因为司马乂在内朝,无法肆意专权,就想除掉司马乂。公元303年八月,司马颖授予陆机后将军,河北大都督,率领王粹、牵秀、石超等二十余万人,进逼京师。司马颙任命张方为都督领精兵七万进攻洛阳。惠帝亲临十三里桥,派皇甫商在宜阳对抗张方,被张方打败。九月,帝师进军缑氏,击退牵秀。而张方进入洛阳,烧毁了清明、开阳二门。死者数万计。石超在缑氏进逼惠帝。十月,惠帝回到宫中。石超将缑氏烧成废墟。王师在东阳门外击破牵秀,又在建春门外击破陆机,司马乂奉惠帝命令在城门讨伐张方。此时洛阳城中饥荒,但将士同心,皆愿效死。张方以为攻不下来,准备回长安。而殿中诸将及三部司马,疲于战争,秘密与左卫将军朱默夜里收捕司马乂,逼迫东海王司马越牵头上表惠帝免除司马乂官职,幽禁于金墉城。张方派部将郅辅率领三千兵士,到金墉城收捕司马乂,剥其衣服,用铁链捆于石柱,四周用通红炭火炙烤致死。司马乂死时年仅28岁。
司马颖入京师,随后又回到邺城镇守,增封二十郡,拜为丞相。以司马颙为太宰、大都督、雍州牧。废黜了羊皇后和皇太子司马覃,司马颙上表请求立司马颖为储,司马颖为皇太弟,丞相如故。所有的威仪,全部迁到邺城。公元304年七月,惠帝御驾亲征,以东海王司马越为大都督,檄召四方,赴者云集,众达十万,邺中震恐。司马颖派石超率众五万,驻扎在荡阴。陈昣的两个弟弟陈匡、陈规,从邺来到王师军中,说邺中现在众人离散,于是王师就疏于防备。石超悄悄出城,击败了王师。流矢射向了惠帝乘坐的车子,惠帝颊部受伤,身中三箭,左右都逃散。唯独侍中嵇绍(嵇康之子)以身护卫。史书记载:
石超军引绍入辕中斫之,惠帝曰:“忠臣也勿杀!”但绍仍被杀,其血溅帝衣。事后,左右欲浣帝衣,帝曰:“此嵇侍中血,勿浣。”
司马越战败后回到东海。司马颖迎奉惠帝进入邺城。任命百官,手握生杀大权。司马颖下令召回司马越,越不应。又任命司马越为太傅,与太宰司马颙共同辅政,司马越拒不接受。越整顿军事,以图东山再起。
当初王浚与孙虑一起害死了司马遹,迁为青州刺史,转而又都督幽州。王浚为自己考虑,结好夷狄,把两个女儿分别嫁给鲜卑的务勿尘和苏恕延。司马乂被害,王浚忿忿不平。与并州刺史东瀛公司马腾讨伐司马颖。司马颖派幽州刺史王斌及石超、李毅等人对抗王浚,被乌丸羯朱等打败。邺中震惊,百官奔走,士庶分散。卢志劝司马颖把天子迎奉到洛阳。当时甲士尚有一万五千人。拂晓,众人排好了队伍准备出发。而程太妃留恋邺不肯走,司马颖犹疑不决,转而部队被击溃。卢志找来绳索和几辆鹿车。司马督韩玄,召集黄门百余人。让惠帝坐上牛车匆忙出发。屯骑校尉郝昌,先前领八千兵守洛阳,惠帝召他赶到汲郡接驾。张方率骑三千迎奉惠帝,历时五天赶到洛阳。王浚乘机攻克邺城。部下暴掠,很多人死去,百姓生灵涂炭。
张方焚烧宗庙、宫室,以绝人心,逼着惠帝迁都长安。军人抢夺后宫和府藏,魏晋以来的风气,已荡然无存。到了长安,征西府为皇宫。只有仆射荀藩、司隶刘暾、太常郑球、河南尹周馥及留下的官员,在洛阳成立留台,依照制度继续处理公务,号为东西台。任命张方为中领军,录尚书事,兼任京兆太守。十二月,惠帝下诏让司马颖回到封地,以豫章王司马炽为皇太弟。
惠帝被迫西迁时,以司马越为盟主的讨逆大军开始西进讨伐关中。张方对司马颙说:“我有十余万人,奉送皇帝回到洛阳,让成都王回到邺城,您留在关中镇守,我北面讨伐博陵。这样,天下可以稍微安定。”司马颙考虑到这个事情实行起来很困难,不答应。他再让司马颖都督河北诸军,镇守邺城。司马越派缪播、缪胤为使者到长安去劝司马颙:把惠帝迎回洛阳,将与颙分陕而治。张方自知罪重,害怕被杀,对司马颙说:“今据形胜之地,奉天子以号令,谁敢不服?”司马颙依然犹豫不决。后来又派张方率十万步兵讨伐司马越,中了缪播、缪胤的离间计,司马颙杀了张方。
公元306年五月,司马越派祁宏等迎接惠帝回到洛阳,从六月开始继续正朔。司马颖从华阴去武关,出新野、准备回到邺。刘弘拦住他。司马颖丢弃母、妻、单车与二个儿子渡河到朝歌,纠集以前的将士,准备到邺城旧将公师藩那里。顿丘太守冯嵩,捉住司马颖及儿子从到邺。刘舆担心司马颖在邺有威望派人假称奉了台诏,连夜赐死了司马颖和二个儿子。永嘉初年,下诏任命司马颙为司徒,司马颙出发,司马模派人在新安雍谷的车上把司马颙及其三子一起扼杀。
惠帝回到洛阳,大权都落到司马越的手中。光熙元年十一月,惠帝因为吃了毒饼而死。据说是司马越所为。急招司马炽入朝即位,时为晋怀帝。历时十六年的“八王之乱”终于落下帷幕。但这仅仅只是两晋乱局的开始。