司马道子后来把权力交给年仅17岁的儿子司马元显,又引用太原大族王国宝等参掌朝权,与王恭、殷仲堪对抗,引起北方军阀的不服和反抗。
次年,王恭、殷仲堪以诛王国宝为名起兵反抗司马道子。司马道子无力抵御,便杀王国宝等,请王恭退兵。又次年,王恭第二次起兵,殷仲堪与雍州刺史杨俭期、广州刺史桓玄(桓温之子)起兵响应。司马道子派子司马元显率兵征讨。后来,因为王恭的部将刘牢之倒戈,王恭被杀。桓玄吞灭了殷仲堪、杨俭期,这次联合叛乱也就失败了。这时,桓玄占据着长江中游,刘牢之控制着长江下游北岸,高雅之控制淮南。司马元显直接控制的地区大大减少,只有八郡。
公元399年,司马元显下令强征江南八郡“免奴为客”的农民当兵。这一举动,不仅引起拥有奴客的世族对政府的不满,从而使东晋政府失去部分士族地主的支持,而且对“免奴为客”者本身也是一种迫害。所以,命令一下,顿时“东土嚣然,人不堪命”,人民纷纷起来反抗,这一事件成为孙恩、卢循起义的直接导火线。
就在镇压孙恩、卢循起义期间,东晋统治集团仍未中断他们的权力之争。402年,盘踞长江上游的荆州都督桓玄,兴兵叛乱,攻入建康,杀司马道子父子及北府兵将领刘牢之等。403年,桓玄逼晋安帝退位,自己做了皇帝,国号楚。
桓玄作乱称帝之初,靠的是北府兵的支持,东晋的大多数士族也对此持默许态度,但桓玄称帝之后,企图剪除北府兵将领,夺取北府军权,这就引起了北府兵的反抗,北府兵将领刘裕团结北府兵中上级军官,密谋推翻桓玄。
刘裕,也就是辛弃疾诗里的寄奴。桓玄称帝后,刘裕表面顺从,获取了桓玄信任。公元404年,刘裕在京口起兵,声讨桓玄,桓玄兵败,逃到江陵,不久被杀。刘裕恢复了东晋统治,迎回安帝,改元义熙。刘裕辅政,掌握了东晋的全部军政大权。刘裕掌权后,对内整顿吏治,重用寒人;实行“土断”,抑制兼并,整顿赋税制度。对外,于410年灭南燕,413年平定了在益州割据的谯纵。417年又灭后秦。这样,刘裕在地主阶级中树立了威望,取代东晋的条件日益成熟。420年,刘裕废东晋恭帝司马德文,自立为帝(宋武帝),国号宋。东晋亡,凡立国103年。