Linux系统中的复信号,Linux系统中的常用命令

作者: 韦德国际1946  发布:2019-05-28

调理zSeries上的Linux应用程序类似于调节和测试其余系统布局上的Linux应用程序。对于有经验的Linux开荒职员,最大的挑战是领略新的体系系统布局。对于刚同志接触Linux的大型机开拓人士,驾驭新的调养工具就好像是1项令人咋舌的天职。不要惧怕。本文将提供一些有效的唤起来支援你入门。

非数字信号(Signal)是Linux系统中用于进度之间交互通信或操作的壹种机制。非时限信号是1个一定普及的课题;在此处,大家无非斟酌两种最根本的实信号以及利用时限信号调控进程的技能。
        时限信号是2个发送到进度的特殊音讯。实信号机制是异步的;当多少个历程接收到一个实信号时,它会立时处理这几个复信号,而不会等待近些日子函数以致当前①行代码甘休运转。复信号有几十种,分别表示着不一致的意思。复信号之间依赖它们的值来不同,但是普通在程序中运用非复信号的名字来代表一个数字信号。在Linux系统中,这一个时域信号和以它们的称呼命名的常量均定义在/usr/include/bits/signum.h文件中。(经常程序中不须要一直包涵那么些头文件,而应该包含<signal.h>。)
        当二个历程接收到时限信号,基于分化的管理情势(disposition),该过程恐怕进行两种差别操作中的一种。各个时限信号都有1个暗中认可管理方式(default disposition),当进度未有点名自身对于有些功率信号的处理格局的时候,暗中同意管理方式将被用来对相应实信号作出响应。对于好些个体系的实信号,程序都足以Infiniti制钦点1个管理格局——程序能够挑选忽略那个实信号,恐怕调用叁个特定的时限信号管理函数。倘使钦命了1个实信号管理函数,当前程序会暂停当前的奉行进度,同不经常间开班推行数字信号管理函数,并且当能量信号管理函数重返之后再从被暂停处继续实践。
        Linux系统在运作中冒出特别规现象的时候也会向进程发送频域信号公告。比方,当二个历程实践违法操作的时候大概会接收SIGBUS(主线错误),SIGSEGV(段溢出荒谬)及SIGFPE(浮点非常)那几个非确定性信号。这么些连续信号的默许处理情势都以甘休程序同期产生3个着力转储文件(core file)。
3个进程除了响应系统一发布来的实信号,仍是可以向此外进度发送能量信号。对于这种机制的二个最普及的利用正是通过发送SIGTE汉兰达M或SIGKILL能量信号来终止别的进度。3#3除此而外,它还分布于向运营中的进度发送命令。多个“用户自定义”的实信号SIGUS奥迪Q7一和SIGUSKoleos二正是专程作此用途的。SIGHUP信号有的时候也用于这么些目标——常常用于唤醒2个介乎等候意况的进度可能使进度重新读取配置文件。
系统调用sigaction用于钦点实信号的管理形式。函数的第三个参数是时限信号的值。之后五个参数是八个针对sigaction结构的指针;第二个针对了将被设置的管理格局,第二个用于保存先前的管理格局。那三个sigaction结构中最注重的都以sa_handler域。它能够是下面多个值:
 
<span style="font-size:18px;">·SIG_DFL,钦点暗许的功率信号管理格局 
·SIG_IGN,钦命该功率信号将被忽视 
· 二个针对性非非确定性信号管理函数的指针。那几个函数应该接受确定性信号值作为唯壹参数,且未有再次回到值。 
</span> 
 
        因为连续信号管理是异步举行的,当复信号管理函数被调用的时候,主程序只怕处于特别虚亏的地方,并且这些场合会向来保持到非时域信号管理函数甘休。因而,应该尽量制止在时域信号管理函数中央银行使输入输出成效、绝大很多库函数和体系调用。
Linux系统中的复信号,Linux系统中的常用命令。        时限信号管理函数应该做尽恐怕少的行事以响应非确定性信号的达到,然后回到到主程序中继续运维(或然终止进度)。许多情景下,所实行的劳作只是记录功率信号的到达。而主程序则按时检查是或不是有非复信号达到,并且针对当下场所作出相应的处理。
       能量信号管理函数也说不定被此外非确定性信号的到达所打断。即使这种境况听上去格外博学睿智,一旦出现,程序将10分难以鲜明难题并拓展调节和测试。乃至于对全局变量赋值或许也是不安全的,因为2个赋值操作也许由两个或越来越多机器指令实现,而在这么些指令施行时期可能会有第四个非时域信号达到,致使被修改的全局变量处于不完全的动静。要是你需求从非数字信号处理函数中设置全局标记以记录时限信号的到达,那几个标记必须是非常体系sig_atomic_t的实例。Linux有限帮衬对于那个体系变量的赋值操作只必要一条机器指令,由此不要操心或者在半路被打断。在Linux系统中,sig_atomic_t正是主导的int类型;事实上,对int只怕越来越小的整型变量以及指针赋值的操作都以原子操作。但是,假如您期望所写的顺序能够向此外标准UNIX系统移植,则应将装有全局变量设为sig_atomic_t类型。
        如下所示,代码列表三.5中的简单程序中,大家运用时限信号管理函数总结程序在运行期接收到SIGUS猎豹CS陆1连续信号的次数。SIGUS君越壹时限信号是一个为应用程序保留的信号。
        代码列表叁.5 (sigusr壹.c)使用确定性信号管理函数
 
<span style="font-size:18px;">#include <signal.h> 
#include <stdio.h>  
#include <string.h> 
#include <sys/types.h> 
#include <unistd.h> 
sig_atomic_t sigusr1_count = 0; 
void handle (int signal_number) 

    sigusr1_count; 

int main () 

    struct sigaction sa; 
    memset (&sa, 0, sizeof (sa)); 
    sa.sa_handler = &handler; 
    sigaction (SIGUSR1, &sa, NULL); 
    /* 这里能够施行一些长日子的专门的学问。*/ 
    /* ... */ 
    printf ("SIGUSR1 was raised %d timesn", sigusr1_count); 
    return 0; 
}</span> 

翻开日志

cattail -f

日记文件表达

/var/log/message 系统运维后的音讯和错误日志,是Red Hat Linux中最常用的日记之壹

/var/log/secure 与三清山相关的日记新闻

/var/log/maillog 与邮件相关的日志新闻

/var/log/cron 与定期职务相关的日志音信

/var/log/spooler 与UUCP和news设备相关的日记信息

/var/log/boot.log 守护进度运维和终止相关的日记音信

  前几日午夜叁点左右,张开网易的稿午时,出现了那般的不当:“The SqlParameter with ParameterName '@EntryID' is already contained by another SqlParameterCollection”。小编重启了IIS,有的时候解决了故障。
  笔者仔细查阅了.Text中的代码,开掘了两处难题:
一、张开壹篇作品时,.Text中调用的是blog_GetEntryByID存款和储蓄进程,而在创造存储进程的参数时,用的是如此的代码:
SqlParameter[] p =
    {
     SqlHelper.MakeInParam("@EntryID",SqlDbType.Int,0,EntryID)
    };
一般意况下, 0应该改成4,一开头出乎意料是其1缘故促成上述故障的。但查了壹晃MSDN, 在SqlParameter的援助中有诸如此类的一句话:“借使未在 size 参数中显式设置 Size,则可根据 dbType 参数的值估计出该大小。”。尽管设成0, 系统也会活动测算出SqlDbType.Int的大大小小。实际上,借使下面的代码有标题,.Text根本就不可能寻常使用。所以那几个标题不是几个标题。
贰、第3难点是在google上查找到的,俺找到了那般的小说:。文章中有诸如此类的代码:
try {
return cmd.ExecuteReader(CommandBehavior.CloseConnection);

文化来自施行,不过对于调节和测试工具,在并未有出现难题而迫使您去修复它们此前,“实行”是不会爆发的。思索到那一点,上面将提供让您入门的“速成”指南。

摘自 w397090770的专栏

系统

uname -a # 查看内核/操作系统/CPU音讯

cat /etc/issue

cat /etc/redhat-release # 查看操作系统版本

cat /proc/cpuinfo # 查看CPU信息

hostname # 查看Computer名

lspci -tv # 列出具备PCI设备

lsusb -tv # 列出装有USB设备

lsmod # 列出加载的内核模块

env # 查看意况变量

}catch(SqlException sqle){
//if stp FAILS and we don't clear command collection,
//the next request will throw: "The SqlParameter with ParameterName
//'XXXX' is already contained by another SqlParameterCollection" error
cmd.Parameters.Clear();

User Debug 日志记录

...

资源

free -m # 查看内存使用量和交换区使用量

df -h # 查看各分区使用意况

du -sh <目录名> # 查看钦命目录的大大小小

grep MemTotal /proc/meminfo # 查看内部存款和储蓄器总数

grep MemFree /proc/meminfo # 查看空闲内部存款和储蓄器量

uptime # 查看系统运作时刻、用户数、负载

cat /proc/loadavg # 查看系统负荷

cmd.Dispose();
if (conn.State == ConnectionState.Open) {
conn.Close();
}
代码的申明中讲得很明亮,若是在cmd.ExecuteReader时时有爆发特别,而从不调用cmd.Parameters.Clear();就能够发生腾讯网明日面世的故障。
再看一下,.Text中的相关代码:

调弄整理一个崩溃的顺序的首先步是弄清哪个地方出了错。zSeries 上的Linux内核具备那样三个放权性子,它在用户进度崩溃时记下一些主干的调试音信。要启用那个特点,请以 root 用户身份施行如下命令:

磁盘和分区

mount | column -t # 查看挂接的分区状态

fdisk -l # 查看全数分区

swapon -s # 查看全体交流分区

hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)

dmesg | grep IDE # 查看运行时IDE设备检查测试境况

private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)

echo 1 >> /proc/sys/kernel/userprocess_debug

网络

ifconfig # 查看所有互联网接口的质量

iptables -L # 查看防火墙设置

route -n # 查看路由表

netstat -lntp # 查看全体监听端口

netstat -antp # 查看全体曾经济建设立的连日

netstat -s # 查看网络总计新闻

         {   

当某些进度崩溃时,日志文件(/var/log/messages)中就能够付给附加的音讯,包含程序终止原因、故障地址,以及包涵程序状态字(PSW)、通用寄存器和访问寄存器的简约寄存器转储。

进程

ps -ef # 查看全体进度

top # 实时体现进程景况(另一篇作品里面有详细的牵线)

             

Mar 31 11:34:28 l02 kernel: User process fault: interruption code 0x10
Mar 31 11:34:28 l02 kernel: failing address: 0
Mar 31 11:34:28 l02 kernel: CPU:    1
Mar 31 11:34:28 l02 kernel: Process simple (pid: 30122, stackpage=05889000)
Mar 31 11:34:28 l02 kernel:
Mar 31 11:34:28 l02 kernel: User PSW:    070dc000 c00ab738
Mar 31 11:34:28 l02 kernel: task: 05888000 ksp: 05889f08 pt_regs: 05889f68
Mar 31 11:34:28 l02 kernel: User GPRS:
Mar 31 11:34:28 l02 kernel: 00000000  004019a0  004019a0  00000000
Mar 31 11:34:28 l02 kernel: 00000003  c00ab732  004008f8  00400338
Mar 31 11:34:28 l02 kernel: 40018ffc  0040061c  40018e34  7ffff800
Mar 31 11:34:28 l02 kernel: 00400434  80400624  8040066e  7ffff800
Mar 31 11:34:28 l02 kernel: User ACRS:
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000001  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: User Code:
Mar 31 11:34:28 l02 kernel: 44 40 50 00 07 fe a7 4a 00 01 18 54 18 43 18 35
a8 24 00 00

用户

w # 查看活动用户

id <用户名> # 查看钦命用户音信

last # 查看用户登入日志

cut -d: -f1 /etc/passwd # 查看系统有着用户

cut -d: -f1 /etc/group # 查看系统具有组

crontab -l # 查看当前用户的安顿职责

              //create a command and prepare it for execution

图 1

服务

chkconfig –list # 列出具有系统服务

chkconfig –list | grep on # 列出全数运维的系统服务

              SqlCommand cmd = new SqlCommand();

图 一 申明程序(名叫“simple”)以1个顺序中断代码 0x10终止(操作系统原理申明那是二个段转换错误),而故障地址为 0。毫无疑问,有人使用了空指针。以往大家精通发生了什么,上边供给澄清它发出在哪里。

程序

rpm -qa # 查看全部安装的软件包

              PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);

图片 1

             

              //create a reader

              SqlDataReader dr;

 

              // call ExecuteReader with the appropriate CommandBehavior

              if (connectionOwnership == SqlConnectionOwnership.External)

本文由韦德国际1946发布于韦德国际1946,转载请注明出处:Linux系统中的复信号,Linux系统中的常用命令

关键词: Linux bv1946