linux屏蔽中断命令行 linux如何禁止ping
LINUX对shell命令的拦截
楼主,shell 接收到一个 非内部命令 (如 ls, find)时,不是把命令提交给内核的,这个概念是错误的。 shell 应该是 fork 出一个进程,这个子进程调用 exec* 系列系统调用 (比如 execlp 等)来载入ls, find等可执行程序执行, 而此时的shell进程本身会 通过 wait 系统调用等待子进程完成。
创新互联建站-专业网站定制、快速模板网站建设、高性价比浦北网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式浦北网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖浦北地区。费用合理售后完善,十余年实体公司更值得信赖。
由上可见,一个进行拦截的地方可以放在 exec 系列调用中,exec是实现在 glibc 里的,所以你只要下载 glibc (或者你们系统使用的 libc )的源码,在 exec 调用中加入你的拦截代码。 编译修改后的glibc,替换系统中的glibc即可。
另外要注意的是,除了shell,其他程序也可能使用 fork+exec 来执行某些命令,如果不想拦截这种情况,在拦截时需判断一下当前进程的父或祖进程,看看是否是shell进程。
最后,glibc实在是太重要了,是所有程序的基础,改动需小心。
Linux如何防止程序中断--screen
在Linux或者服务器使用中,我们通常会有以下困扰:
1) 在跑大型数据的时候,一旦关闭会话窗口、软件、断网、断电等情况下程序出现异常中断
2) 现在暂停编写或者跑程序,一段时间后继续运行,希望继续运行时原先导入的变量还在
3) 目前的Shell软件限制开的窗口为5个,若是同时前台操作的话只能进行五个终端,同一终端使用多个会话是不行的
这些情况下可以使用screen命令解决 【离线操作,保留工作环境,同一终端多个会话】 :
1. 构建一个新的会话,并命名为sessionName
screen -S sessionName
可以发现构建之后,与创建会话之前没有任何差别,但是接下来我们所有的输入命令都在这个sessiion中
2. screen -ls
在任一个打开的窗口可以查看我们构建的session,其中会发现会话有以下形式组成
sessionID.sessionName [状态(attached【在线】;detached【离线】)]
3. screen -r sessionName 除了使用会话名字还可以使用会话ID
重新连接会话
4. screen -d sessionName 或者在已经入的session中,按住Ctrl 不放,分别按 a d
离线连接的会话,这时候程序会放在后台运行,无需担心断电断网关机等各种突发状况
5. 假设在当前的sessionName中,我们可以使用 exit 退出并杀死当前session;或者 screen -S sessionName -X quit
【一定要记得每个session跑完之后,需要Kill它】
6. 有时你发现采用 screen -r sessionName 发现显示没有这个会话,但是screen -ls的时候会发现这个会话明确是存在的,那么可以采取的策略是:
先 screen -d sessionName 这个会话,使其离线,然后再使用 screen -r sessionName将其重新连线
如何关闭linux smp中断
在多 CPU 的环境中,还有一个中断平衡的问题,比如,网卡中断会教给哪个 CPU 处理,这个参数控制哪些 CPU 可以绑定 IRQ 中断。其中的 {number} 是对应设备的中断编号,可以用下面的命令找出:
cat /proc/interrupt
比如,一般 eth0 的 IRQ 编号是 16,所以控制 eth0 中断绑定的 /proc 文件名是 /proc/irq/16/smp_affinity。上面这个命令还可以看到某些中断对应的CPU处理的次数,缺省的时候肯定是不平衡的。
设置其值的方法很简单,smp_affinity 自身是一个位掩码(bitmask),特定的位对应特定的 CPU,这样,01 就意味着只有第一个 CPU 可以处理对应的中断,而 0f(0x1111)意味着四个 CPU 都会参与中断处理。
几乎所有外设都有这个参数设置,可以关注一下。
这个数值的推荐设置,其实在很大程度上,让专门的CPU处理专门的中断是效率最高的,比如,给磁盘IO一个CPU,给网卡一个CPU,这样是比较合理的。
现在的服务器一般都是多核了,但是中断很多时候都是只用一个核,如果有些中断要求比较高,可以把它独立分配给一个cpu使用。
linux下 软中断处理函数do_softirq中用了local_irq_disable()来屏蔽中断
中断屏蔽,确实会导致中断丢失。但是,中断控制器本身会保证中断不被丢失。对于水平触发中断,一个中断发送出去,如果没有cpu的ack,会一直悬停在那,直到相应为止。一个边缘触发的中断,是设计成可以丢失的中断,丢失了也无所谓。因为中断控制器会重发。
对于网络数据中的大量中断,有NAPI的方式来实现。
分享标题:linux屏蔽中断命令行 linux如何禁止ping
文章源于:http://myzitong.com/article/ddgcpjs.html