Linux命令整理
-
根据程序名称查询进程ID
ps -ef|grep 进程名
ps -ef|grep nginx ########## out ########### 501 5313 2523 0 11:56上午 ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox nginx
-
根据端口号查找相应的进程号 (必须以root用户执行)
netstat -anp | grep 8080
-
查看TCP网络连接情况?
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ########## out ########### LAST_ACK 5 SYN_RECV 30 ESTABLISHED 15 FIN_WAIT1 51 FIN_WAIT2 5 TIME_WAIT 10
Linux下查看TCP网络连接情况
-
杀死 进程id 为 12664 的进程
taskkill /pid 12664 /f
-
僵尸进程产生的原因?
每个进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都存储在进入点。当用 ps 命令查看系统中的进程信息时,看到的就是进程表中的相关数据。所以,当一个父进程以 fork() 系统调用建立一个子进程后,核心进程就会在进程表中给这个子进程分配一个进入点,然后将相关信息存储在该进入点所对应的进程表中,这些信息中有一项是其父进程的识别码。
当这个子进程结束的时候(比如调用 exit 命令),其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁)。
此时进程表中的数据会被该进程的退出码(exit code)、执行时所用的CPU时间等数据所取代,这些数据会一直保留到系统将它传递给它的父进程为止。由此可见,defunct 进程的出现时间是在子进程终止后,但是父进程尚未读取这些数据之前。
此时,该僵尸子进程已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载着该进程的退出状态信息供其他进程收集,除此之外,僵尸进程不再占有任何存储空间。他需要他的父进程来为他收尸,如果他的父进程没有 SIGCHLD 信号处理函数调用 wait() 或 waitpid() 等待子进程结束,也没有显式忽略该信号,那么它就一直保持僵尸状态。如果这时候父进程结束了,那么 init 进程会自动接手这个子进程,为他收尸,他还是能被清除掉的。但如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是系统中为什么有时候会有很多的僵尸进程。
-
僵尸进程如何处理?
【注意】defunct状态下的僵尸进程是不能被 kill -9 命令杀掉的,否则就不叫僵尸进程了。
处理方法:
-
重启
-
通过 ps -ef | grep defunct_process_pid 找到其父进程并杀掉,那么该僵尸进程将自动消失
僵尸进程产生原因和解决方法
-
-
kill 的原理, kill -9 和 kill -15的区别?
kill 命令默认信号是 SIGTERM(15),当使用 kill -15 时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的:
-
立即停止程序
-
释放响应资源后停止程序
-
忽略该信号,继续执行程序
因为kill -15信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。
但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。
这也就是为什么我们有的时候使用kill命令是没办法"杀死"应用的原因。
kill -9 相对强硬一点,系统会发出 SIGKILL(9)信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。
所以,相比于 kill -15 命令,kill -9 在执行时,应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等。
kill -9 和 kill -15 的区别
-
-
看磁盘大小?
df -h
-
Linux 中 shift 的作用?
位置参数可以用 shift 命令左移。比如 shift 3 表示原来的 $4 现在变成 $1 ,原来的 $5 现在变成 $2 等等,原来的 $1、$2、$3丢弃,$0 不移动。不带参数的 shift 命令相当于 shift 1。
Linux命令学习之shift命令
-
排查CPU持续90%的情况?动画显示?
top 命令,动态显示系统资源使用情况。
-
查看系统内存?
cat /proc/meminfo 命令可以显示所有关于内存使用的信息,比如:
-
可用/闲置物理内存数量
-
等待被写入缓存的数量
-
已写回磁盘的数量
free 命令是一个用来查看内存使用概况的快速简单的方法,这些信息从 “/proc/meminfo” 获取。
它提供了一个快照,用于展示总计/闲置的物理内存和系统交换区,以及已使用/闲置的内核缓冲区。
-
-
vim 编辑器中如何查找字符串?
命令模式下输入 “/”,例如查找abc:“/abc”
如果查找下一个,按 “n” 即可
-
如何查看一个大文件的最后一行
tail -n 1 file_name
-
进程 IO 占用高,如何排查?
-
通过 iostat 从系统维度查看 IO 负载情况
-
使用 iotop 从进程纬度查看磁盘 IO 负载情况
-
-
system() 与 exec() 的区别?
执行 exec() 后,老的进程上下文将被 exec() 出来的新的进程上下文覆盖,新进程代替原进程执行。
执行 system() 后,相当于 fork() 出一个子进程,并等待此子进程执行完毕。
-
树状显示当前文件夹的内容?
tree 命令,tree -L 1 -d /test 表示只显示 /test 下的一层目录
-
Linux 中反引号、单引号、双引号的区别?
-
反引号 在命令中起着命令替换的作用,命令替换是指能够将一个命令的标准输出插在一个命令行中任何位置。
仅在双引号中起作用。
echo the current directory is `pwd` # 输出如下: the current directory is /home/cuiyujie
-
单引号
单引号将其中的内容都作为字符串处理,忽略所有的命令和特殊字符,只作为普通纯文本原样输出。
为了保护文本不被转换,除了它本身,就是说除去单引号本身之外,在单引号内的所有文本都是原样输出。
-
双引号
双引号内会解析特殊字符,当把文本放在双引号中,除了 $,\ (反斜杠),和 ‘(倒引号)之外,其他内容原样输出,即不作解析处理。
这意味着单词分割,路径名展开,波浪线展开,和花括号展开都被禁止,然而参数展开,算术展开,和命令替换仍然执行。
如果要忽略特殊字符,就可以利用 \ 来转义。
-