永嘉五年(311年)五月二十七日,呼延晏先于刘曜、王弥、石勒等到达洛阳。二十八日,攻打平昌门。三十日,攻克平昌门,焚烧东阳门以及各府寺等房屋建筑。六月初一日,呼延晏因援兵未到,掳掠后撤退。晋怀帝在洛水安排准备了一些船只,准备向东逃难,呼延晏都将之焚烧。而王弥和刘曜也赶到了。永嘉五年(311年)六月十一日,王弥、呼延晏攻克宣阳门,进入南宫,登上太极前殿,放纵士兵大肆抢掠。怀帝出华林园的门,想逃奔长安,敌军追上把他抓住,囚禁在端门。刘曜从西明门进城到武库驻扎。十二日,刘曜杀死晋太子司马诠等人,士人百姓死了三万多人。于是又挖掘各个陵墓,把宫庙、官府都焚烧光了。汉军攻陷洛阳,羊献容皇后被俘,被刘曜强纳为妾。把晋怀帝以及皇帝专用的六方玉玺都送往平阳。
永嘉六年(312年),安定太守贾疋迎立秦王司马邺为太子,却传来晋怀帝遇害消息。司马邺遂登位为愍帝,改元建兴,都长安。
史书载晋怀帝永嘉年间(307年―311年),丧乱更甚。雍州以东的百姓多数饥饿乏困,相互变卖儿女,奔走逃亡流离迁移的,多不胜数。幽、并、司、冀、秦、雍等六个州闹大蝗灾,草木以及牛马的毛都没有了。又遇到疾疫,加上饥荒。百姓又被强盗杀害,漂流的尸体布满河面,白骨遮蔽田野。
建兴元年(313年3月14日),晋怀帝司马炽为刘聪所毒杀,时年三十岁。