晋怀帝被送到平陽,刘聪封他为会稽郡公,但对他一点儿也不好,不但时常在别人面前羞辱他,还把他软禁起来。刘聪经常举办宴会,每当这个时候,他就让晋怀帝拿着酒瓶到处给别人斟酒,简直是把晋怀帝当作仆人对待。那些和怀帝一同被掠来平陽的晋国大臣们看到自己的皇帝被人欺负,心里很伤心,忍不住哭出声来。久而久之,刘聪对那些大臣的态度很是反感,思来想去,刘聪决定杀了晋怀帝来警告晋国大臣。
公元310年,刘渊去世,他的儿子刘聪继位。公元311年,刘聪派王弥、刘曜等大将带兵进攻洛陽。洛陽守军不堪一击,匈奴军队没费多少力气就攻陷了洛陽城,匈奴人在城中大开杀戒,城中百姓和官兵被屠杀至少三万人。晋怀帝在大臣们的掩护下逃亡长安,可惜半路被匈奴人截住,随后,匈奴人押着晋怀帝和晋国大臣们回到了北方。
公元304年,匈奴贵族刘渊自称为汉王,起兵反抗晋朝。而这个时候,晋朝的怀帝司马炽也登基了,改元永嘉。刘渊野心勃勃,打算侵吞晋国,他派出得力部将带兵南下进攻,晋军奋力抵抗,可仍然被匈奴击败,刘渊的势力也变得越来越强大,晋朝相继失守多座城镇。
公元313年,刘聪假意赐美酒给晋怀帝,其实酒里加了剧毒,可怜的怀帝就这么被毒死了。
怀帝遇害的消息传到了中原,晋国旧臣十分震惊。为了兴复晋国,替怀帝报仇,原晋国安定太守贾疋拥立秦王司马业登基,定都长安,这就是晋愍帝。
怀帝司马炽本无意卷入政权纷争,可是被司马越推上了皇位,不过政权一直掌握在司马越手中,怀帝和惠帝一样,只是一个傀儡。晋怀帝时刻计划着除掉司马越,公元311年,怀帝秘密召见几位大臣,商量讨伐司马越的事宜,大家都认为应该尽快除掉司马越,于是怀帝开始下诏。然而就在这个时候,司马越突然得了急病,没多久就去世了。司马越病逝在洛陽,他的封国在东海,所以要派人把他的遗体送回去。晋怀帝任命王衍为大元帅,命他护送司马越的灵柩回东海。王衍带着军队出发了,走到苦县(今河南鹿邑)宁平城(今河南郸城东宁平乡)的时候,遇上了刘渊的军队。两方人马立刻展开攻势,交战十分激烈,晋军抵抗不住,最终全军覆没。匈奴部将烧毁了司马越的灵柩,杀死了王衍。至此,晋朝的军队被全部消灭,晋朝再也没有能力与外敌对抗。
晋朝末年是天灾频繁出现的时期,粮食颗粒无收,百姓饥饿难耐,为了填饱肚子,百姓们带着一家老小,背井离乡去外地求生,全国出现大批流动的难民;随后又爆发了瘟疫,许多百姓由于没钱看病而惨死,尸骨在大路上随处可见。而朝廷只知自己享乐,全然不顾百姓死活。