讲真,Linux面试考网络,十有八九会问怎么查看端口被哪个进程占用了。你能脱口而出吗?
我个人习惯用lsof -i:端口号,直接就能出进程名和pid,还有一种方法是netstat -tulnp | grep 端口号,也能找出来。现在很多新系统也开始用ss了,ss -tulnp找起来更快,结果更准。这三种方法你都说出来,不比你只说一个更亮眼?
我之前遇到过一个挺奇葩的问题,说服务器突然ping不通了,你怎么排查?
其实思路说开了也不难,先看服务器是不是真的死机了,能不能连上远程管理口?要是能进去,先看网卡是不是掉了,ip地址还在不在?然后看防火墙是不是把ICMP禁了,再看路由对不对,是不是默认网关丢了。一层层往下排,别上来就说不知道,面试官其实就是看你排查问题的思路对不对。
再说进程,问你怎么把一个进程放到后台跑,就算你退了ssh它也不挂?
很多人知道&,但是你直接./xxx &,退了ssh还是会杀进程啊。正确的做法是用nohup ./xxx &,或者用setsid,再或者进了进程之后用ctrl+z挂起,然后bg放后台,再disown移除作业,这样就算你退了会话,进程也照样跑。
还有一个经典问题,僵尸进程是什么?怎么产生的?怎么消灭?
僵尸进程就是子进程退出了,父进程没有回收它的PCB,就变成僵尸了。说白了就是爹不管儿子了。要是你直接kill僵尸进程,杀不掉的,因为它已经死了。解决方法就是杀它的父进程,父进程一死,init就会收养这个僵尸进程,自动回收了。这个回答说出来,绝对比你背定义强一万倍。