Questions tagged «signals»

信号是可以发送给正在运行的进程的消息。信号可以由程序,用户或管理员启动。

4
Segmentation Fault在后台如何工作?
除了“ CPU的MMU发送信号”和“内核将其定向到有问题的程序,终止它”之外,我似乎找不到任何其他信息。 我以为它可能会将信号发送到外壳,外壳通过终止有问题的进程和打印来处理它"Segmentation fault"。因此,我通过编写一个极小的shell (称为crsh(废话外壳))测试了该假设。该外壳程序不执行任何操作,只是接受用户输入并将其输入给system()方法。 #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } 因此,我在一个裸终端(没有bash在下面运行)中运行了这个shell 。然后,我继续运行一个产生段错误的程序。如果我的假设正确,则可能是a)崩溃crsh,关闭xterm,b)不打印"Segmentation fault"或c)两者。 braden@system ~/code/crsh/ $ xterm -e ./crsh Crap Shell> ./segfault Segmentation fault Crap Shell> [still running] 回到正方形,我猜。我刚刚演示了执行此操作的不是外壳程序,而是其下的系统。甚至如何打印“细分故障”?“谁”在做?内核?还有吗 信号及其所有副作用如何从硬件传播到程序的最终终止?

4
将SIGTERM转发给Bash中的孩子
我有一个Bash脚本,看起来与此类似: #!/bin/bash echo "Doing some initial work...."; /bin/start/main/server --nodaemon 现在,如果运行脚本的bash shell收到SIGTERM信号,它也应该将SIGTERM发送到正在运行的服务器(该服务器会阻塞,因此无法进行陷阱)。那可能吗?
86 bash  shell  signals  docker 

2
如何用信号通知标准输入结束
在Bash中,我了解到可以通过here文档更改结束信号。但是默认情况下,我如何发信号通知标准输入结束? 我偶然发现,使用cat和chardet时,可以通过Ctrl + d将其stdin输入表示为完成。但是我似乎记得Ctrl + d和Ctrl + c与结束正在运行的命令的执行类似。那我错了吗?


3
“陷阱……INT TERM EXIT”真的必要吗?
对于许多例子trap使用trap ... INT TERM EXIT的清理任务。但是是否真的有必要列出所有三个sigspec? 该手册说: 如果SIGNAL_SPEC为EXIT(0),则从外壳退出时将执行ARG。 我认为无论脚本正常完成还是由于收到SIGINT或脚本而结束,该脚本都适用SIGTERM。实验还证实了我的信念: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit & sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit & sleep 1; kill -TERM %1 [1] 773 TRAP [1]+ Terminated ./trap-exit 那为什么这么多例子列出了全部INT TERM EXIT呢?还是我错过了某件事,是否有鞋底EXIT会错过的情况?
63 bash  shell  signals  trap 

5
为什么将SIGINT发送到其父进程时不传播到子进程?
给定一个shell进程(例如sh)及其子进程(例如cat),我如何使用shell的进程ID 模拟Ctrl+ 的行为C? 这是我尝试过的: 运行sh然后cat: [user@host ~]$ sh sh-4.3$ cat test test 从另一个终端发送SIGINT到cat: [user@host ~]$ kill -SIGINT $PID_OF_CAT cat 收到信号并终止(如预期)。 将信号发送到父进程似乎不起作用。为什么将信号cat发送到其父进程时不传播到该信号sh? 这不起作用: [user@host ~]$ kill -SIGINT $PID_OF_SH
62 shell  process  signals 


4
进程终止时的默认退出代码?
当某个进程被可处理的信号(例如SIGINT或)杀死SIGTERM而不处理该信号时,该进程的退出代码是什么? 对于像这样的无法处理的信号SIGKILL呢? 据我所知,杀死一个SIGINT可能导致退出代码的进程130,但这会因内核或外壳实现而有所不同吗? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 我不确定如何测试其他信号... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # same problem

7
在Shell脚本中超时
我有一个shell脚本,多数民众赞成从标准输入读取。在极少数情况下,将没有人准备提供输入,并且脚本必须超时。如果超时,脚本必须执行一些清理代码。最好的方法是什么? 该脚本必须具有很高的可移植性,包括没有C编译器的20世纪Unix系统和运行busybox的嵌入式设备,因此不能依赖Perl,bash,任何编译语言,甚至是完整的POSIX.2。特别是$PPID,read -t和完全POSIX兼容的陷阱不可用。还不包括写入临时文件;即使所有文件系统都是只读安装的,脚本也可能运行。 为了使事情变得更困难,我还希望脚本在不超时的情况下保持合理的速度。特别是,我还在Windows(主要在Cygwin中)中使用了脚本,其中fork和exec的比例特别低,因此我希望将其使用量降至最低。 简而言之,我有 trap cleanup 1 2 3 15 foo=`cat` 我想添加一个超时。我不能cat用read内置的替换。如果超时,我想执行该cleanup功能。 背景:此脚本通过打印一些8位字符并比较前后的光标位置来猜测终端的编码。脚本的开头测试了stdout是否连接到受支持的终端,但是有时环境在说谎(例如,即使使用调用也要plink设置TERM=xtermTERM=dumb)。脚本的相关部分如下所示: text='Éé' # UTF-8; shows up as Ãé on a latin1 terminal csi='␛['; dsr_cpr="${csi}6n"; dsr_ok="${csi}5n" # ␛ is an escape character stty_save=`stty -g` cleanup () { stty "$stty_save"; } trap 'cleanup; exit 120' 0 1 2 3 …
53 shell  signals  timeout 

9
终止无限循环
我有一条命令,希望每次终止时都可以自动再次运行,因此我运行了以下命令: while [ 1 ]; do COMMAND; done; 但是如果我不能停止循环,Ctrl-c那只会杀死COMMAND而不是整个循环。 我将如何实现类似的功能,但无需关闭终端就可以停止?
52 bash  signals 

9
无法使用Ctrl + C停止bash脚本
我编写了一个带有循环的简单bash脚本,用于打印日期并ping到远程计算机: #!/bin/bash while true; do # *** DATE: Thu Sep 17 10:17:50 CEST 2015 *** echo -e "\n*** DATE:" `date` " ***"; echo "********************************************" ping -c5 $1; done 当我从终端运行它时,无法使用停止它Ctrl+C。似乎将传送^C到终端,但是脚本没有停止。 MacAir:~ tomas$ ping-tester.bash www.google.com *** DATE: Thu Sep 17 23:58:42 CEST 2015 *** ******************************************** PING www.google.com (216.58.211.228): 56 data bytes 64 …
42 bash  terminal  signals 


4
当非root用户向root用户的进程发送信号时会发生什么?
我想知道UNIX信号的安全性。 SIGKILL会杀死进程。那么,当非root用户的进程向root用户的进程发送信号时会发生什么呢?该过程是否仍执行信号处理程序? 我遵循公认的答案(古卢姆语言),然后输入man capabilites,我发现了很多有关Linux内核的知识。来自man capabilities: NAME capabilities - overview of Linux capabilities DESCRIPTION For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged processes (whose effective user ID is 0, referred to as superuser or root), and unprivileged processes (whose effective UID is nonzero). …
33 security  signals 

1
较弱的杀死信号-HUP(1)-INT(2)和-TERM(15)之间的差异
除了最猛烈的kill -9(SIGKILL),我不太了解其他3个常见信号(之间的差别在这里)-HUP(1),-INT(2)和-TERM(15)。 在哪种情况下一种可行,而另一种不可行? 通常,-9(-KILL)什么时候失败? 对我来说,他们似乎要问要终止的进程正常,不保存。我要对严酷程度进行评估-HUP < -TERM < -INT < -KILL。
32 kill  signals 

2
收到kill -HUP时的程序行为?
有没有办法找出程序在收到终止信号HUP时将做什么? 无需简单地运行of:D命令 例如, killall -HUP pppd重新启动pppd killall -HUP firefox只会杀死firefox
32 kill  signals 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.