2018-01-15 13:35:15 lk_db 阅读数 1274
  • 《Linux系统编程、网络编程》第6章 信号

    课程内容: 学习本章的意义、Linux下都有哪些信号、signal函数、子进程对父进程信号的集成情况、kill、raise、alarm、pause、abort函数、信号休眠函数的唤醒、信号的发送、接收和处理的过程、如何调用API修改信号的屏蔽字。

    271 人正在学习 去看看 张先凤
当某个进程挂起时,可以使用kill操作系统进程号的方式结束该进程。


[oracle@rac1 ogg]$ ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.33 22986205 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_160502.0200_FBO
Linux, x64, 64bit (optimized), Oracle 11g on May  2 2016 06:30:42
Copyright (C) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
GGSCI (rac1) 1> exit
[oracle@rac1 ogg]$ cd dirpcs/
[oracle@rac1 dirpcs]$ more MGR.pcm 
PROGRAM MGR     PROCESSID       MGR     PORT    rac1.7809       PID     22991

[oracle@rac1 dirpcs]$ more EXTFULL.pce 
PROGRAM EXTRACT PROCESSID       EXTFULL PORT    rac1.7840       PID     25236

[oracle@rac1 dirpcs]$ more DPFULL.pce 
PROGRAM EXTRACT PROCESSID       DPFULL  PORT    rac1.7841       PID     25243




GGSCI (rac2) 20> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
REPLICAT    RUNNING     REPFULL     00:00:00      00:00:02    

[oracle@rac2 ogg]$ cd dirpcs/
[oracle@rac2 dirpcs]$ more MGR.pcm 
PROGRAM MGR     PROCESSID       MGR     PORT    rac2.7809       PID     31396

[oracle@rac2 dirpcs]$ more REPFULL.pcr 
PROGRAM REPLICAT        PROCESSID       REPFULL PORT    rac2.7840       PID  18559
2018-07-30 17:32:32 Shawei_ 阅读数 1741
  • 《Linux系统编程、网络编程》第6章 信号

    课程内容: 学习本章的意义、Linux下都有哪些信号、signal函数、子进程对父进程信号的集成情况、kill、raise、alarm、pause、abort函数、信号休眠函数的唤醒、信号的发送、接收和处理的过程、如何调用API修改信号的屏蔽字。

    271 人正在学习 去看看 张先凤

操作系统中 各个信号 代表的含义:

1) SIGHUP       终端的控制进程结束,通知session内的各个作业,脱离关系 
2) SIGINT       程序终止信号(Ctrl+c)
3) SIGQUIT      和2号信号类似(Ctrl+\),产生core文件
4) SIGILL       执行了非法指令,可执行文件本身出现错误 
5) SIGTRAP      有断点指令或其他trap指令产生,有debugger使用
6) SIGABRT      调用abort函数生成的信号 
7) SIGBUS       非法地址(内存地址对齐出错)
8) SIGFPE       致命的算术错误(浮点数运算,溢出,及除数为0 错误)
9) SIGKILL      用来立即结束程序的运行(不能为阻塞,处理,忽略)
10) SIGUSR1     用户使用 

11) SIGSEGV     访问内存错误
12) SIGUSR2     用户使用
13) SIGPIPE     管道破裂
14) SIGALRM     时钟定时信号
15) SIGTERM     程序结束信号(可被阻塞,处理)
16) SIGSTKFLT   协处理器栈堆错误
17) SIGCHLD     子进程结束,父进程收到这个信号并进行处理,(wait也可以)否则僵尸进程
18) SIGCONT     让一个停止的进程继续执行(不能被阻塞)
19) SIGSTOP     让一个进程停止执行(不能被阻塞,处理,忽略)
20) SIGTSTP     停止进程的运行(可以被处理和忽略)

21) SIGTTIN     当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
22) SIGTTOU     类似SIGTTIN,但在写终端时收到
23) SIGURG      有紧急数据或者out—of—band 数据到达socket时产生
24) SIGXCPU     超过CPU资源限定,这个限定可改变
25) SIGXFSZ     当进程企图扩大文件以至于超过文件大小资源限制
26) SIGVTALRM   虚拟时钟信号(计算的是该进程占用的CPU时间)
27) SIGPROF     时钟信号(进程用的CPU时间及系统调用时间)
28) SIGWINCH    窗口大小改变时发出
29) SIGIO       文件描述符准备就绪,可以进行读写操作
30) SIGPWR      power failure
31) SIGSYS      非法的系统调用

34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

信号的分类:
不可靠信号:(1 - 31)
1.Linux的信号处理继承自UNIX,早期的UNIX当信息处理函数执行完毕,该信号恢复成缺省处理动作,(Linux已经改进)
2.信号不排队,会出现信号丢失现象
可靠信号:(34 - 64)
不会出现信号丢失
非实时信号:
不可靠信号都是非实时信号
实时信号:
可靠信号都是实时信号

希望对信号的了解有所帮助。

2019-11-05 19:46:23 allway2 阅读数 86
  • 《Linux系统编程、网络编程》第6章 信号

    课程内容: 学习本章的意义、Linux下都有哪些信号、signal函数、子进程对父进程信号的集成情况、kill、raise、alarm、pause、abort函数、信号休眠函数的唤醒、信号的发送、接收和处理的过程、如何调用API修改信号的屏蔽字。

    271 人正在学习 去看看 张先凤

q00n进程一般可以安全kill

当手工使用“alter system kill session 'sid,serial#';”命令杀数据库中的session后,会话信息可能还会驻留在数据库中。使用这个orakill命令便可在操作系统级可以彻底清除。

 

KILL -9 SPID (Linux) 或 orakill ORACLE_SID spid (Windows)

可以使用下面SQL语句找到对应的操作系统进程SPID,然后杀掉。当然杀掉操作系统进程是一件危险的事情,尤其不要误杀。所以在执行前,一定要谨慎确认。

1.orakill命令怎么用?
通过在command命令行直接使用orakill命令便可得到简单但清晰的实用使用指导。
需要注意的是:“sid”指的是“instance name”,不要被名字误导!
C:\>orakill

Usage:  orakill sid thread

  where sid    = the Oracle instance to target
        thread = the thread id of the thread to kill

  The thread id should be retrieved from the spid column of a query such as:

        select spid, osuser, s.program from
        v$process p, v$session s where p.addr=s.paddr

2.orakill命令何时用?
1)当手工使用“alter system kill session 'sid,serial#';”命令杀数据库中的session后,会话信息可能还会驻留在数据库中。使用这个orakill命令便可在操作系统一级可以彻底清除之;
2)从操作系统一级直接杀掉某个异常的会话。

3.orakill命令这样用
sys@secooler> col sid for 9999
sys@secooler> col serial# for 9999
sys@secooler> col spid for 99999
sys@secooler> col OSUSER for a20
sys@secooler> col program for a30
sys@secooler> select s.sid, s.serial#, p.spid, s.osuser, s.program from v$process p, v$session s where p.addr=s.paddr order by s.sid;

  SID SERIAL# SPID    OSUSER               PROGRAM
----- ------- ------- -------------------- --------------------
  147       9 2300    BJSECDB\Housw        sqlplus.exe
  149       2 5904    SYSTEM               ORACLE.EXE (q001)
  151       2 3096    SYSTEM               ORACLE.EXE (q000)
  155       9 2884    SYSTEM               ORACLE.EXE (QMNC)
  158      17 5588    SYSTEM               ORACLE.EXE (J000)
  159       3 1088    BJSECDB\Housw        sqlplus.exe
  160       1 4776    SYSTEM               ORACLE.EXE (MMNL)
  161       1 4308    SYSTEM               ORACLE.EXE (MMON)
  162       1 3224    SYSTEM               ORACLE.EXE (CJQ0)
  163       1 5780    SYSTEM               ORACLE.EXE (RECO)
  164       1 2272    SYSTEM               ORACLE.EXE (SMON)
  165       1 2804    SYSTEM               ORACLE.EXE (CKPT)
  166       1 2696    SYSTEM               ORACLE.EXE (LGWR)
  167       1 4876    SYSTEM               ORACLE.EXE (DBW0)
  168       1 5668    SYSTEM               ORACLE.EXE (MMAN)
  169       1 4644    SYSTEM               ORACLE.EXE (PSP0)
  170       1 1112    SYSTEM               ORACLE.EXE (PMON)

17 rows selected.

数据库的实例名字是“secooler”,我们打算杀死SPID是“2300”这个session,那么方法如下:
sys@secooler> host orakill secooler 2300

Kill of thread id 2300 in instance secooler successfully signalled.

 

 

2017-01-17 13:09:55 yangshangwei 阅读数 6666
  • 《Linux系统编程、网络编程》第6章 信号

    课程内容: 学习本章的意义、Linux下都有哪些信号、signal函数、子进程对父进程信号的集成情况、kill、raise、alarm、pause、abort函数、信号休眠函数的唤醒、信号的发送、接收和处理的过程、如何调用API修改信号的屏蔽字。

    271 人正在学习 去看看 张先凤

概述

无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个”kill”命令强制终结它。本篇博文中,我们将展示给你多种方式使用”kill”命令终结应用。


Kill命令和信号

[xgj@entel2 ~]$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

可以清晰的看到 -n 指的是 信号编号



[xgj@entel2 ~]$ kill -l    ---> 查看Linux/Unix的信号变量
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

当你执行一个”kill”命令,你实际上发送了一个信号给系统,让它去终结不正常的应用。总共有64个你可以使用的信号,但是基本上你只需要知道SIGTERM(15)和SIGKILL(9)。

区别:

  • SIGTERM(15) - 此信号请求一个进程停止运行。此信号是可以被忽略的。进程可以用一段时间来正常关闭,一个程序的正常关闭一般需要一段时间来保存进度并释放资源。换句话说,它不是强制停止。

  • SIGKILL(9) - 此信号强制进程立刻停止运行。程序不能忽略此信号,而未保存的进度将会丢失


使用”kill”的语法是:

kill [信号或选项] PID(s)

默认信号(当没有指定的时候)是SIGTERM。当它不起作用时,你可以使用下面的命令来强制kill掉一个进程:

kill SIGKILL PID

或者

kill -9 PID

这里”-9”代表着SIGKILL信号。


如果你不知道应用的PID,仅需要运行这个命令:

ps ux

它会显示所有正在运行的应用还有应用的PID。

这里写图片描述

例如,要kill掉**Agent,我会运行命令:

kill -9 31921

也可以在同一时间kill多个进程。

kill -9 PID1 PID2 PID3

PKill

”pkill”命令允许使用扩展的正则表达式和其它匹配方式。

你现在可以使用应用的进程名kill掉它们,而不是使用PID。例如,要kill掉xgjAgent,只需要运行命令:

pkill xgjAgent

使用正则表达式匹配的话,你可以输入进程名的部分字符,比如:

pkill xgj

为了避免kill掉错误的进程,你应该用一下”pgrep -l [进程名]“列表来匹配进程名称。


Killall

killall同样使用进程名替代PID,并且它会kill掉所有的同名进程。例如,如果你正在运行多个xgjAgent的实例,可以用命令把它们全部kill掉:

killall xgjAgent

xkill

xkill 是图形方式kill一个应用。当你在终端键入”xkill”,你的光标将立刻变成一个”十字”。你只需要做的是在不正常的应用上点击一下,它就会立刻kill掉这个应用。

2019-11-03 21:48:46 u011983531 阅读数 46
  • 《Linux系统编程、网络编程》第6章 信号

    课程内容: 学习本章的意义、Linux下都有哪些信号、signal函数、子进程对父进程信号的集成情况、kill、raise、alarm、pause、abort函数、信号休眠函数的唤醒、信号的发送、接收和处理的过程、如何调用API修改信号的屏蔽字。

    271 人正在学习 去看看 张先凤

1. kill -0

kill -0 pid 不发送任何信号,不会结束进程,但是系统会进行错误检查。
所以经常用来检查一个进程是否存在,存在返回0;不存在返回1

kill -0 $pid
if [ $? -gt 0 ]
	echo "进程$pid存在"
else
	echo "进程$pid不存在"
fi

2. kill -15

执行完该指令后,操作系统会发送一个 SIGTERM 信号给对应的程序。当程序接收到该信号后,可能会发生以下几种情况的一种:

  • 当前程序立刻停止;
  • 程序释放相应资源,然后再停止;
  • 程序可能仍然继续运行。

大部分程序会先释放自己的资源,然后再停止。但是也有程序可以在接受到信号量后,继续做其他一些事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出响应,也就是说,SIGTERM 是可能被阻塞、被忽略的。

3. kill -9

如果 kill -15 发出的SIGTERM可以不进行响应,那么kill -9发出的SIGKILL就是必杀信号,多半 ROOT 会直接使用这个命令。

小结:在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。

操作系统

阅读数 14

没有更多推荐了,返回首页