Linux面试题整理

前言

又一次拉肚子,真的很疼,不过又犯错误了,我真的是神烦,屁事怎么这么多。希望她还能原谅我。我怎么可以这样。什么都帮不了她,又不听话,还倔,有什么资格发脾气。但是真的不要乱想,我还是那个我,我还是只爱你。以后不再会了。一个人在寝室,她肯定很害怕,要去哄一下我们家的仙女宝宝。真的想把自己打一顿。

前段时间在忙考科二,不过还是命好,一把过。再加上要处理排练节目的事情,有蛮多笔记没有整理了。这里开一篇来整理一下Linux的一些面试问题,为今后的面试打个基础。不过最近压力好大,真的希望自己可以做梦都在学习。不过老是到1点又犯困,还是要慢慢调整一下,找回学习劲头。


请问 $?、 $$、 $#、 $* ?

  • $? 表示上一条命令的返回值
  • $$ 代表当前bash的pid号
  • $# 表示位置变量的个数
  • $* 所有的位置变量的内容

Linux 括号的使用

数值的比较或计算用双圆括号

字符串的判断使用双中括号

{}变量隔离

[root@routerA_Cpb ~]# sg="123"
[root@routerA_Cpb ~]# echo $sg
123
[root@routerA_Cpb ~]# echo $sg1

[root@routerA_Cpb ~]# echo ${sg}1
1231

shell脚本执行一段代码程序,终止shell脚本后会让程序停止吗?如何让程序继续运行?

父进程被杀死子进程也会被杀死,所以程序会停止

方法一: 拦截信号 trap命令

操作系统:

进程之间进程通信的方式: 信号
SIGHUP

session–》会话

一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。
这儿是可能会有,在一定情况之下是没有的。
与终端交互的进程是前台进程,否则便是后台进程

SIGHUP会在以下3种情况下被发送给相应的进程:

  • 1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)
  • 2、session首进程退出时,该信号被发送到该session中的前台进程组和后台进程组中的每一个进程
  • 3、若进程的退出,导致一个进程组变成了孤儿进程组,且新出现的孤儿进程组中有进程处于停止状态,则SIGHUP和SIGCONT信号会按顺序先后发送到新孤儿进程组中的每一个进程。

系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。

[root@localhost lianxi]# echo $$
13877
[root@localhost lianxi]# 
[root@localhost lianxi]# kill -l  查看信号的类型
 1) SIGHUP  --》父进程死的时候会给下面的子进程发,系统对SIGHUP信号的默认处理是终止收到该信号的进程。
2) SIGINT      ---》按CTRL+C 强制终止某个进程  interrupt 中断

9) SIGKILL      --》系统强制杀死进程的信号 ---》内核会调用某个函数去kill掉进程--》锦衣卫出动杀死   kill   --》不能被屏蔽
15) SIGTERM  ---》  系统告诉进程本身,自我终结   terminate 
[root@localhost ~]# kill 63081   --》发送的是15信号

当父进程被杀死的时候,子进程如果还存活会成为一个孤儿进程--》会被第1个进程systemd,systemd进程的编号是1  ,这是centos7里的第1个进程

centos6里的第1个进程叫init ,进程号也是1

[root@localhost lianxi]# cat while.sh 
trap "echo i am busy" 1 2 15 9

n=1
while :
do
    echo "luoxu$n"
    sleep 100
    python36 while.py
    ((n++))
done
[root@localhost lianxi]# 

[root@localhost lianxi]# cat while.py
import time
while True:
    print("luoxu")
    time.sleep(1)
[root@localhost lianxi]#

方法二:supervisor –>让某个程序做成一个服务,让他一直运行

方法三:让程序在后台运行 &的使用

& 放在命令后面表示设置此进程为后台进程

默认情况下,进程是前台进程,这时此进程(命令执行相当于本质是开启一个进程)就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。

[root@routerA_Cpb lianxi]# cat test.sh
#!/bin/bash
while true
do 
    echo 1
    sleep 3
done
[root@routerA_Cpb lianxi]# bash test.sh 
1
1
1
^C
[root@routerA_Cpb lianxi]# bash test.sh &
[2] 2245
[root@routerA_Cpb lianxi]# 1
1
1
1
^C
[root@routerA_Cpb lianxi]# 1
1
1
1
^C
[2]-  已杀死               bash test.sh
[root@routerA_Cpb lianxi]#

未完待续

…….

无标题

要多做让宝宝开心的事,要多陪宝宝,要听宝宝话,不能让宝宝伤心难过。

赏瓶可乐吧(*^▽^*)