东晋政府为抵抗孙恩起义军,加强了浙东沿海地区的防务,派北府军另一名将刘牢之都督会稽等五郡军事,管理这一地区的军务,屯驻上虞。刘牢之又命将领刘裕戍守句章(浙江慈溪境),派吴国内史袁山松,在沪渎(今上海一带)修筑垒坝,防止孙恩从海上进攻。
401年(隆安五年)二月,孙恩又出浃口,攻句章,没有攻下,遭到刘牢之的进攻,只好又退回海岛。三月,孙恩又进攻沪渎,结果攻占了沪渎,杀死吴国内史袁松山,大败官兵。孙恩带领起义大军乘胜进攻,战士十多万,战船一千多艘,浩浩荡荡地向京口(今江苏镇江)进攻。面对来势凶猛的起义大军,东晋朝廷十分惶恐,急忙内外戒严,布置防守。当时建康兵力十分空虚,刘牢之命部将从海盐星夜前进,截拦起义军,朝廷利用这段时间将豫州刺史、谯王司马尚之调回京师。起义军与刘裕大军在京口相遇,被刘裕打败,只好退回船上,他想进攻建康,可建康已加强了守备,孙恩便放弃了硬攻建康的打算,派兵攻下广陵(江苏扬州),又北上攻占郁洲(今江苏连云港境内),俘虏东晋大将高雅之。这时,刘裕率大军追来,大败义军于郁洲,孙恩率军沿海南还,在沪渎和海盐,又被刘裕两次打败,损失惨重。起义军没有军粮,又流行瘟疫,队伍死伤大半,孙恩只好又退回海岛,从此力量衰弱下去。
402年(元兴元年),东晋政府封锁沿海地带,陆地上的粮食物品运不到海岛上,孙恩起义军给养发生了困难,许多人被饿死。孙恩只好率众再次登陆,在进攻临海时,被临海太守辛景打败,孙恩感到悲观失望,便率家属及部下一百多人投水自尽。
孙恩死后,起义军余众还有数千人,他们推选孙恩的妹夫卢循为首领,继续战斗。
卢循,字于先,小名元龙,范阳涿(河北涿县东北)人,出身在士族大地主家庭。孙恩起义时,他积极参与,并与孙恩共同谋划,所以孙恩死后,他被众人推为领袖。这时,桓玄已掌握东晋朝政,桓玄为了安抚东土百姓,任命卢循为永嘉太守。当时起义军力量损失惨重,处于低谷,卢循为养精蓄锐,接受了朝廷的封号。但他并没有放弃对东晋的进攻。403年(元兴二年),卢循先后派兵进攻东阳、永嘉等地,都被刘裕打败。刘裕追赶卢循到晋安(福建福州市),卢循抵挡不过,只好渡海南走。404年十月,进攻番禺(广州)。攻番禺城一百多天,广州刺史吴隐之死守,拒不投降。一天夜里,风特别大,起义军放起大火,吴隐之害怕城内有起义军的内应,乘乱破城,便下令不准救火,只准严守城池。结果城内房舍都被烧毁,数以万计的人被烧死,城内大乱,起义军趁机攻入城内,活捉了吴隐之。起义军入城后,在清理灰烬时,得到被烧死的髑髅三万多具,他们挖一个大坑,将他们埋在一起,名为“共冢”。
攻克广州后,卢循自称平南将军,管理广州地方事务。当时朝廷正是多事之秋,北府军将领刚平定桓玄的叛乱,忙着清理桓氏余党,稳定政局,没有时间对付卢循。正好卢循派使臣入朝,刘裕也乐于顺水推舟,稳住卢循,于405年(义熙元年),正式任命卢循为征虏将军、广州刺史、平越中郎将。又任命卢循的妹夫徐道覆为始兴相。卢循很高兴,派人给刘裕送去益智粽,刘裕也派人给卢循送去续命汤。卢循还把俘虏的前广州刺史吴隐之和流亡在广州的世族大地主都放走。卢循这样做一方面是起义军力量较弱,无力再战,另一方面,卢循也想趁朝廷大乱之际,割据广州。这就是大族出身的卢循革命不彻底的一面。
410年(义熙六年),刘裕北伐南燕慕容超,建康守备空虚,这正是起义军北上的好时机。卢循已占据广州六年了,他不愿北上。徐道覆却积极主张北上,为劝说卢循,他特意从始兴赶到广州,他对卢循说:“朝廷虽任命你为广州刺史,可他们总把你当成心腹之患,早晚要除掉你。现在刘裕北伐,没有归期,你要不乘此时机北上,而求一时的平安,等到刘裕北伐回师后,一定会亲率军队,翻山越岭,进攻我们。你虽有神机妙算,也无力抵挡。现在这大好时机,千万不能放弃。等我们攻克了京师,刘裕虽还兵,也无能为力了。你若不同意,我自己率始兴军队北上。”
卢循见徐道覆这么坚决,说得也有道理,也就同意了。
徐道覆是个很有谋略的人,他表面上虽接受了朝廷的任命,可内地里却悄悄地做准备,随时进行反抗。为了制造战舰,他派人到南康山中砍伐木材,说是要运往都城去卖。等到木材砍完后,又说没办法运到远处去卖,便在当地削价处理。当地居民见木材很便宜,便纷纷购买,储存起来。到用木材时,徐道覆便按着当年老百姓购买木材的卖券,再将这些木材征集回来,不过十来天,就造成许多船,以供军队使用。
卢循和徐道覆起兵后,兵分两路,一路由卢循指挥,从始兴出发,进攻长沙,直指江陵;一路由徐道覆率领,下南康(郡治赣,今江西赣州市)、庐陵(郡治石阳,今江西吉水县东北)、豫章(郡治南昌,今江西南昌),由江西直取建康。起义军一路北上,所向无敌。徐道覆大军在豫章大败晋军,杀死东晋镇南江军、江州刺史何无忌,这引起东晋朝廷的极度恐慌。刘裕北伐未归,朝廷便派豫州刺史、北府兵名将刘毅率兵到浔阳(今江西九江)去堵截。卢循大军一路北上,在长沙打败东晋荆州刺史刘道规后,进兵巴陵。他放弃进攻江陵的计划,从巴陵顺江东下,与徐道覆兵合一处,准备集中兵力进攻建康。二人会合后,军队数十万,战舰上千艘,声势浩大。五月,在桑落州(今江西九江市境内)大败刘毅军队,直逼建康附近的江宁(今南京市江宁县)。
东晋政府见起义军逼近京师,急忙召回刘裕。可刘裕的军队长途北伐,已疲惫不堪,死伤很重,又匆忙南返,几乎没有什么战斗力。而起义军竟有十多万,力量相差悬殊。东晋朝廷一些大臣主张向北迁都,人心惶惶,有位大臣叫孟昶,他就主张迁都,刘裕坚决不同意,认为朝廷一动,整个天下就会大乱。孟昶见刘裕不同意,又不愿看到东晋朝廷被起义军消灭,竟服毒自杀了。刘裕却镇定自若,他一面下令京城内外戒严,令京城居民修筑防御工事,一面重新进行军事部署,调青州刺史诸葛长民、兖州刺史刘藩、并州刺史刘道怜等,带兵入京,保卫建康。
在敌我力量非常悬殊的关键时刻,卢循却犹豫不决,耽误了几天,错失良机。当他听说刘裕回到建康的消息后,就想退兵到浔阳,然后再占领江陵,割据江州和荆州。经徐道覆多次力争,才下令进攻建康的石头城,结果失败。这时刘裕调兵遣将已经完毕,建康守卫已经加强,卢循只好退到浔阳。刘裕一面派兵追赶卢循,一面派人从海上进攻卢循的根据地广州。十月,徐道覆率军三万进攻江陵,被晋将刘道规大败,死伤一万多人,徐道覆退还到湓口(今江西九江市西)。十二月,卢循、徐道覆又重整军队,率军数万,连舰而下。战舰相连,看不到首尾。卢循的大军与刘裕军队在大雷(安徽望江)相遇。刘裕用轻便的小船和弓弩进攻起义军,又顺风放火,烧卢循战舰,结果起义军大败,又死伤万余人,战舰大部分都被烧毁了。卢循只好收集散兵数千人,向根据地广州撤退,徐道覆回到始兴。
411年(义熙七年)二月,刘裕派兵攻克始兴城,徐道覆战败牺牲。刘裕先派进攻广州的建威将军孙处、振武将军沈田子等率兵三千,已从海道攻占了番禺。卢循回广州后,围番禺城二十多天,也未能攻下,结果被官兵打败。卢循奔向交州(今越南境内),起义军只剩下三千多人,又被交州刺史杜慧度打败,战舰也都被烧毁。卢循走投无路,毒死妻子儿女十余人,然后投水自杀。至此,孙恩、卢循所领导的东晋末年农民大起义彻底失败了。
孙恩、卢循起义先后经历了十二年,起义军活动范围遍及长江、珠江、湘水和赣水流域的广大地区,给东晋政府及江南门阀大族以沉重的打击。在农民起义军的打击下,东晋统治摇摇欲坠,王、谢等大族在战争中死亡很多,尤其是东晋赖以生存的北府军的统帅权已由大族谢氏手中转移到寒人出身的刘裕手中,刘裕以此为资本,最后灭亡了东晋政权。
孙恩、卢循起义有许多特点,如以五斗米道的宗教形式组织和发动群众,起义军大都是五斗米道教徒,这是因为在封建社会,农民是单个的个体劳动者,不便于集中和联络,只好用宗教的形式把他们集中起来。起义的另一个特点是采用水军作战的形式,起义军拥有庞大的舰队,纵横在长江、大海之上,这在中国农民战争史上,是前所未有的壮举。
当然,孙恩、卢循所领导的农民起义也有缺点和错误。孙恩、卢循都出身大族,立场不坚定,有割据一方的思想,并且,在关键时刻犹豫不决,坐失良机。另外,起义军没有巩固根据地,一失败就退逃到海岛上,这样起义军的给养很困难,容易被官兵打败等。
孙恩、卢循起义失败了,但它的历史意义不能抹杀。在农民起义军的打击下,以王、谢为代表的门阀势力开始衰落下去,以刘裕为代表的寒门地主开始登上历史舞台,他们建立政权后,不得不对农民采取让步政策,农民生活条件得到了相对的改善。