公元304年,正是“八王之乱”发生时,刘渊借口说回匈奴借兵帮助司马颖作战,跑回匈奴贵 族的聚居地离石(今山西离石),召集匈奴五个部族,被拥为大单于,发兵攻打当时正在与晋军作战的鲜卑族军队。当李雄自号成王的消息传来后,刘渊决定也自封 王号,刘渊认为:自己本是汉朝皇家的外甥,和汉皇族是兄弟关系,现在汉朝灭了,自己称王,正好用“汉”的名称,便正式称为汉王。公元308年,刘渊觉得自 己的势力够大了,便在平阳(今山西临治)自称皇帝,派出大将王弥、刘曜领兵攻打洛阳,但两次进攻都没有成功。
刘渊去世以后,他的儿子 刘聪继承了皇帝位,刘聪继续让王弥和刘曜领兵攻晋,这一次,王弥和刘曜不是直接向晋国首都洛阳进军,而是领兵在各地转战,把洛阳以外的地方一一占领,割断 晋王朝和地方上的关系。当刘曜、王弥在各地打击晋王朝力量时,晋怀帝让东海王司马越率兵20万与汉军作战。司马越当时执掌了朝廷的军政大权,对晋怀帝非常 瞧不起,晋怀帝也不放心他,想借地方力量来除掉司马越,司马越对晋怀帝也抱有戒心,在和汉军作战时,只满足于维持现状,也不去积极打击汉军。
公元311年,正是晋怀帝的元嘉五年,东海王司马越病死,兵权交到了太尉王衍手中。王衍是个崇尚清淡、徒具虚名的空头理论家,他想把晋军主力部队撤到郯 城去,刚走到苦县,就被石勒的骑兵包围,汉军轻而易举地攻破县城,晋军主力10万多人溃不成军,全部被杀,随军转移的皇室成员48个诸侯王也全都被 杀,大批官员丧生,连王衍本人也被石勒冷嘲热讽一顿之后杀死。
消灭王衍所统领的晋主力部队以后,刘聪又派刘曜、王弥率军攻下了洛阳。 汉军拥进皇城,见人就杀,见东西就抢,晋怀帝被俘虏,从王公大臣以下,到一般老百姓,被杀死两万多人。刘曜让士兵把这些被杀的尸体全部迁到洛水北岸埋葬, 士兵们在城中放火烧毁宫殿和官府衙门,一座气势雄伟的洛阳城几乎化为一堆灰烬,这就是有名的“永嘉之乱”。
晋怀帝司马炽被俘虏以后,由汉军大将呼延晏派人押送到汉国首都平阳。刘聪听说晋怀帝被押到,升殿高坐,封呼延晏为镇南大将军,将晋怀帝司马炽和随行人员押上大殿。司马炽见了刘聪,弯腰行礼,自称臣子。刘聪封晋怀帝为平阳公,让其留在平阳居住。
不久,刘聪设宴,召晋怀帝出席宴会,喝了几杯酒以后,嘲笑地问司马炽:“这么多年来,你们司马家族互相攻战,兄弟之间就像仇敌一样,这是什么道理啊?” 司马炽低着头说:“这是上帝要灭我们司马氏江山,所以叫我们弟兄之间互相攻战,而您的大汉天下,也就建立起来了。”听得刘聪开怀大笑。
晋怀帝司马炽在平阳的俘虏生活过得很快,不知不觉一年时间就过去了。新年这一天,刘聪在光极殿大摆宴席,召集文武大臣出席,为了炫耀自己的威风,刘聪命 令晋怀帝司马炽改穿一身青色衣服,打扮成奴仆的模样,站在酒席帝边为参加宴会的人倒酒,司马炽不得不捧着酒壶,低着头,一杯一杯地为客人倒酒,满脸通红。 随同晋怀帝一道被俘的几个旧臣偷偷地痛哭流泪,这些情景都被刘聪看见了,刘聪大为恼火,把晋怀帝赶出大殿。
几个月以后,刘聪到底不放心,派人用毒酒毒死了司马炽。当怀帝司马炽被杀的消息传到长安以后,秦王司马邺被大臣们立为皇帝,这就是西晋的最后一个皇帝——晋愍(音mǐn)帝。
公元316年,刘聪攻下长安。晋愍帝也遭到了怀帝同样的命运,在受尽侮辱后被杀。西晋王朝维持了52年,终于灭亡。