晋惠帝皇后贾南风消灭了太后杨氏集团、消灭了汝南王司马亮和楚王司马玮这些妨碍自己掌权的有力对手,终于松了一口气,可以一手遮天独断朝政了。但是,为了长久打算,她感到威胁她权力的还有一个人,那就是太子。太子是晋惠帝后宫的妃子谢政所生,很早就立为太子。随着年龄的增长,他对贾后一伙的专横跋扈,渐露不满之意。公元299年,贾南风诬陷他母子要弑君,于是把太子废为平民。太子无罪被废,引起一部分拥护太子的朝臣的不满。第二年,他们联络握有军权的赵王司马伦,密谋废除贾后,复立太子。赵王司马伦当即满口答应参与行动。
但是,司马伦原本与贾后关系亲密,他害怕太子复位对自己不利;于是,他先是挑动贾后用毒药害死太子,然后借口为太子报仇,领兵冲入宫中,捕杀了贾后和她的党羽,夺得了政权。第二年,他索性废掉了傀儡皇帝晋惠帝,自己做起皇帝来。
赵王司马伦称帝,马上激起其他宗室诸王的反对。齐王司马联合成都王司马颖、河间王司马颙等起兵讨伐司马伦。双方在洛阳(今河南洛阳)附近激战两个多月,死亡近十万人,赵王司马伦兵败被杀。齐王司马迎回晋惠帝,入朝辅政。
不久,河间王司马颙联合在洛阳的长沙王司马乂,又对司马发动进攻。两军在京城展开激战。一时,洛阳城内飞箭如雨,火光冲天。混战三日,齐王司马兵败被杀,长沙王司马乂掌握政权。
公元303年,司马颙又联络成都王司马颖,杀掉司马乂,后又打败了企图乘乱夺取朝廷大权的东海王司马越。战乱中,晋惠帝被司马颙的部下劫持去长安(今陕西西安),安置在河间王司马颙的征西将军府。中央政权又落到司马颙手中。
公元305年,东海王司马越再次起兵攻打司马。司马颙联合司马颖率军反击,结果战败逃走。第二年,司马越攻入长安。把晋惠帝夺回洛阳。司马颖、司马颙先后被司马越的亲信势力杀死。
这年十一月的一天夜晚,晋惠帝吃了有毒的面饼,死在显阳殿。司马越另立晋惠帝的弟弟司马炽为帝,是为晋怀帝,司马越开始独掌朝政大权。到此为至,历时十六年的晋皇室宗亲间的“八王之乱”才告结束。
“八王之乱”中,生产遭到极大破坏,加上天灾、瘟疫流行,数以百万计的百姓死亡或流离失所。西晋王朝也在这场群兽狂斗、自相残杀中走向了灭亡的前夜。