경기도 고양 출신. 평양 숭실학교를 졸업한 뒤 기독교학교의 교사로 근무하다가 서울로 올라와 광성연초공사(廣城煙草公司)의 기계 감독으로 근무하였다.
1920년 만주 봉천(奉天)으로 전근된 것을 기회로 비행사가 되기 위해 비행 학교가 있는 중국 광둥[廣東]으로 갔다.
그러나 중국 내전으로 인해 학교가 폐교되었으므로 뜻을 이루지 못하고 상해로 돌아왔다. 상해에서 전차 회사의 전차 감독이 되어 잠시 일을 보다가 항일 운동에 몸바칠 것을 결심하고 북경으로 가서 독립운동 단체인 의열단(義烈團)에 입단하였다.
1921년 단장 김원봉(金元鳳)으로부터 총독 암살 밀령을 받고 국내로 들어와 전기 수리공으로 변장하고 9월 12일 총독부에 잠입하여 2층 비서과(총독실로 오인)와 회계과장실에 폭탄을 던졌다.
비서과에 던진 폭탄은 불발이었으나 회계과장실에 던진 폭탄은 폭발하였다. 총독부가 폭발로 인해 혼란 상태에 빠진 틈을 이용하여 현장을 빠져 나와 평양을 거쳐 중국으로 무사히 탈출하였다.
1922년 일본의 전 육군대신이며 육군 대장인 다나카[田中義一]가 필리핀을 거쳐 상해에 도착한다는 정보를 입수한 의열단으로부터 다나카 암살이라는 임무를 맡게 되었다. 이를 위해 동지 오성륜(吳成崙, 본명 李正龍)과 같이 치밀한 계획을 세워 1차 저격은 오성륜이 담당하고, 만약 실패할 경우를 대비하여 2차 저격을 담당하기로 하였다.
거사 당일인 3월 28일 선편으로 황푸탄[黃浦灘]에 도착한 다나카가 배에서 내려오자, 준비하고 있던 오성륜이 다나카를 향하여 권총을 발사하였으나, 발사 순간 신혼여행차 상해에 오던 영국 여인이 다나카의 앞을 막아섬으로써, 총탄은 영국 여인에게 명중되어 실패하고 말았다.
이 때 계획에 따라 달아나는 다나카를 향하여 폭탄을 투척하였으나, 폭탄마저 불발하여 거사가 실패로 돌아갔다. 그리고 재빨리 현장을 탈출하려고 할 때 중국 경찰이 추격해 오자 공포를 쏘며 주장로[九江路]를 지나 쓰촨로[四川路]로 달아났으나, 즉사한 영국 여인의 남편이 쏜 권총에 맞고 쓰러져 붙잡히고 말았다.
4월 1일 상해 일본 총영사관에서 예심을 마치고 5월 3일 일본 나가사키[長崎]로 압송되어 9월 25일 나가사키지방재판소에서 무기징역을 언도받았으나, 검사의 공소로 공소원(控訴院)에서 사형이 언도되었다.
그 뒤 무기징역으로 감형되었고 다시 20년형으로 감형되었다가 1936년 8월 2일 가고시마형무소에서 출옥하였다. 귀국후 조카 김기복(金基福)의 이태원 집에 머물렀으나 일본 형사에게 연행된 뒤 소식이 끊겨 생사를 알 수 없었다. 그의 최후에 대한 이강훈 독립지사의 회고에 의하면 용산경찰서 연행 중 한강에 투신해 생을 마감하였다고 한다.
1962년 건국훈장 대통령장이 추서되었다.