📄 ch38_08.htm
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 38] 38.8 What Are Signals? </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly & Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:49:41Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-260-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch38_01.htm"TITLE="38. Starting, Stopping, and Killing Processes"><LINKREL="prev"HREF="ch38_07.htm"TITLE="38.7 Why ps Prints Some Commands in Parentheses "><LINKREL="next"HREF="ch38_09.htm"TITLE="38.9 Killing Foreground Jobs "></HEAD><BODYBGCOLOR="#FFFFFF"TEXT="#000000"><DIVCLASS="htmlnav"><H1><IMGSRC="gifs/smbanner.gif"ALT="UNIX Power Tools"USEMAP="#srchmap"BORDER="0"></H1><MAPNAME="srchmap"><AREASHAPE="RECT"COORDS="0,0,466,58"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="467,0,514,18"HREF="jobjects/fsearch.htm"ALT="Search this book"></MAP><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch38_07.htm"TITLE="38.7 Why ps Prints Some Commands in Parentheses "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 38.7 Why ps Prints Some Commands in Parentheses "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 38<BR>Starting, Stopping, and Killing Processes</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch38_09.htm"TITLE="38.9 Killing Foreground Jobs "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 38.9 Killing Foreground Jobs "BORDER="0"></A></TD></TR></TABLE> <HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-2010">38.8 What Are Signals? </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-42819"></A>Signals are a simple, but important means of interprocesscommunication. Interprocess communication sounds fancy, but it'sreally a simple concept: it's the means by which one program sends amessage to another program. It's common to think of signals asspecial messages sent by the <SPANCLASS="link">UNIX kernel (<ACLASS="linkend"HREF="ch01_14.htm"TITLE="The Kernel and Daemons ">1.14</A>)</SPAN>but, in fact, any program can signal any other program.</P><PCLASS="para">What kinds of messages can you send with a signal? Relatively few, inreality. Signals aren't "arbitrary" messages, like letters; they area small group of pre-defined messages, each with its own specialmeaning. System V UNIX supports 16 signals, each of which is assigneda number; BSD-derived UNIX implementations and SVR4 have 32 signals.<ACLASS="xref"HREF="ch38_08.htm#UPT-ART-2010-TAB-0"TITLE="Common Signals">Table 38.2</A>lists some of the more commonly used signals. It also lists keyboardcharacters that send common signals on BSD systems (these canbe changed; see article<ACLASS="xref"HREF="ch05_09.htm"TITLE="Setting Your Erase, Kill, and Interrupt Characters ">5.9</A>).<ACLASS="indexterm"NAME="AUTOID-42825"></A><ACLASS="indexterm"NAME="AUTOID-42827"></A><ACLASS="indexterm"NAME="AUTOID-42830"></A><ACLASS="indexterm"NAME="AUTOID-42832"></A><ACLASS="indexterm"NAME="AUTOID-42835"></A><ACLASS="indexterm"NAME="AUTOID-42837"></A><ACLASS="indexterm"NAME="AUTOID-42839"></A><ACLASS="indexterm"NAME="AUTOID-42841"></A><ACLASS="indexterm"NAME="AUTOID-42844"></A><ACLASS="indexterm"NAME="AUTOID-42846"></A><ACLASS="indexterm"NAME="AUTOID-42849"></A><ACLASS="indexterm"NAME="AUTOID-42851"></A><ACLASS="indexterm"NAME="AUTOID-42853"></A><ACLASS="indexterm"NAME="AUTOID-42855"></A><ACLASS="indexterm"NAME="AUTOID-42858"></A><ACLASS="indexterm"NAME="AUTOID-42860"></A><ACLASS="indexterm"NAME="AUTOID-42862"></A><ACLASS="indexterm"NAME="AUTOID-42864"></A><ACLASS="indexterm"NAME="AUTOID-42866"></A></P><TABLECLASS="table"><CAPTIONCLASS="table"><ACLASS="title"NAME="UPT-ART-2010-TAB-0">Table 38.2: Common Signals</A></CAPTION><THEADCLASS="thead"><TRCLASS="row"VALIGN="TOP"><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Signal Name</TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Number</TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Meaning and Typical Use</TH></TR></THEAD><TBODYCLASS="tbody"><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">HUP</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">1</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Hangup - stop running. Sent when you log out or disconnect a modem.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">INT</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">2</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Interrupt - stop running. Sent when you type CTRL-c.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">QUIT</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">3</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Quit - stop running(and<SPANCLASS="link">dump core (<ACLASS="linkend"HREF="glossary.htm#UPT-ART-1010"TITLE="Glossary">52.9</A>)</SPAN>).Sent when you typeCTRL-\.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">KILL</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">9</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Kill - stop unconditionally and immediately; a good "emergency kill."</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">SEGV</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">11</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Segmentation violation - you have tried to access illegal memory.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">TERM</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">15</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Terminate - terminate gracefully, if possible.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">STOP</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">17</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Stop unconditionally and immediately; continue with CONT.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">TSTP</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">18</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Stop - stopexecuting, ready to continue (in either background orforeground). Sent when you type CTRL-z. <SPANCLASS="link"><EMCLASS="emphasis">stty</EM> (<ACLASS="linkend"HREF="ch05_09.htm"TITLE="Setting Your Erase, Kill, and Interrupt Characters ">5.9</A>)</SPAN> calls this<EMCLASS="emphasis">susp</EM>.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">CONT</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">19</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Continue - continue executing after STOP or TSTP.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">CHLD</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">20</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Child - a child process's status has changed.</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">USR1</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">30</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">User-defined signal.</TD></TR></TBODY></TABLE><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-42927"></A><ACLASS="indexterm"NAME="AUTOID-42929"></A>While this list isn't definitive, it shows you the types of thingssignals can do. Many signals, like <EMCLASS="emphasis">SIGSEGV</EM>, are warning orerror messages. You've probably seen the frustrating "segmentationviolation" message. That message came when the kernel detectedsomething wrong and sent your program a <EMCLASS="emphasis">SIGSEGV</EM> signal; in response, yourprogram quit. Others signals, like <EMCLASS="emphasis">SIGTSTP</EM>, are generated in response tospecial characters on the keyboard. And a lot of signals just say,"Your time is up, goodbye!"</P><PCLASS="para">When a process receives a signal, it can take a number of actions; for example:</P><ULCLASS="itemizedlist"><LICLASS="listitem"><PCLASS="para">It can take whatever default action is specified for the signal. Bydefault, some signals kill the process that receives them. For somesignals, the default action is to stop running and dump core.(<EMCLASS="emphasis">SIGQUIT</EM> is an example of this.) Othersignals have no effect by default.</P></LI><LICLASS="listitem"><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-42942"></A><ACLASS="indexterm"NAME="AUTOID-42944"></A>It can <SPANCLASS="link">trap (<ACLASS="linkend"HREF="ch44_12.htm"TITLE="Trapping Exits Caused by Interrupts ">44.12</A>)</SPAN>the signal and run a special "signal handling"function - in which case, it can do whatever it wants. A signalhandler often does whatever's necessary to shut the program downnicely: make sure that files are closed and left in a consistentstate, and so on.</P></LI><LICLASS="listitem"><PCLASS="para">It can ignore the signal, in which case nothing happens.</P></LI></UL><PCLASS="para">You've probably read that the command <EMCLASS="emphasis">kill -9</EM> is guaranteed to kill aprocess.Why?Two special signals in<ACLASS="xref"HREF="ch38_08.htm#UPT-ART-2010-TAB-0"TITLE="Common Signals">Table 38.2</A>can't be caught or ignored: the <EMCLASS="emphasis">KILL</EM> and <EMCLASS="emphasis">STOP</EM>signals.</P><PCLASS="para">The <SPANCLASS="link"><EMCLASS="emphasis">kill</EM> (<ACLASS="linkend"HREF="ch38_10.htm"TITLE="Destroying Processes with kill ">38.10</A>)</SPAN>command doesn't kill - it really does nothing more thansend signals. As you now know, signals often bring death anddestruction - but there's no necessary reason for them to do so.</P><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">ML</SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch38_07.htm"TITLE="38.7 Why ps Prints Some Commands in Parentheses "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 38.7 Why ps Prints Some Commands in Parentheses "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch38_09.htm"TITLE="38.9 Killing Foreground Jobs "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 38.9 Killing Foreground Jobs "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">38.7 Why ps Prints Some Commands in Parentheses </TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">38.9 Killing Foreground Jobs </TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed & awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -