公不事先告知,敦促公孙瓒改弦更张,而兵起萧墙,这并非国家之利。加上胜负难以预料,不如休兵,以武力逼迫其就范。公孙瓒必定悔祸谢罪,这是所谓的‘不战而屈人之兵’。”刘虞以程绪大战当前提出异议,扰动军心,于是杀他示众。刘虞告诉士兵:“不要伤害其他人,只杀一个伯圭(公孙瓒)就行了。”刘虞手下从事公孙纪,平时因为同姓被公孙瓒厚待,趁夜跑到公孙瓒处告发刘虞的计划。当时,公孙瓒的部众都散布在外面,公孙瓒自觉不敌,本想逃走。结果刘虞的士兵不善于作战,又爱惜百姓的房屋,下令不许焚烧城池,一时间竟攻不下来。公孙瓒于是召集精锐勇士数百人,顺风纵火,火烧刘虞军营,趁势突袭。刘虞遂大败,向北逃至居庸县,又打算召乌桓、鲜卑来救自己。公孙瓒追击,三日城陷,抓住了刘虞,把刘虞和他的妻小带回蓟县,仍让他做傀儡管理州中事务。正赶上朝廷派使者段训来增加刘虞的封邑,让他掌管北方六州的事务,并拜公孙瓒为前将军,封易侯,假节督幽、并、青、冀四州。公孙瓒趁机诬陷刘虞之前与袁绍合谋要当皇帝,胁迫使者段训将刘虞斩首。故常山相孙瑾、掾张逸、张瓒等忠义愤发,相继前来看望刘虞,大骂公孙瓒,结果都被杀害。公孙瓒将刘虞的首级送到京都,半路被刘虞的故吏尾敦劫走安葬。刘虞在北方很得人心,他死后,幽州及流亡至此的百姓都痛哭流涕。
刘虞死后,其旧部鲜于辅、齐周、鲜于银推举阎柔为乌桓司马,与公孙瓒部将邹丹战于潞河之北,斩杀邹丹等四千余人。之后,乌桓峭王迎接刘虞子刘和,与袁绍军在兴平二年(195年)破公孙瓒于鲍丘,杀二万余人。