Questions tagged «signals»

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

2
是EXIT,DEBUG,RETURN和ERR信号吗?
将trap在bash内置的语法如下 trap [-lp] [arg] [sigspec ...] ...每个sigspec都是信号名称或信号编号。信号名称不区分大小写,并且SIG前缀是可选的。 ... bash的说明书指出,sigspec可能是EXIT,DEBUG,RETURN,和ERR。它们是信号的名称吗? 为什么在下面给出的所有信号名称列表中都找不到它们,甚至SIG为它们添加前缀? 它们仅与bash shell相关,而与Linux OS相关吗?它们是bash shell信号,而不是Linux OS信号吗? $ trap -l 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 …
14 bash  signals 


4
Ctrl-Z和kill -STOP有什么区别?
当make从外壳程序运行命令(在大型项目上)时,可以键入Ctrl-Z来停止该过程并返回到外壳程序。随后,我可以运行fg以继续该过程。 我正在尝试编写一个shell脚本来自动执行此操作(特别是每隔几秒钟检查一次我的CPU温度,并在温度过高时停止该过程,因为我的计算机容易过热)。我的第一次尝试是这样的(简化的): make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" 不幸的是,这没有用。向该进程发送SIGSTOP不会暂停它(通过继续将输出发送到终端可以明显看出这一点)。我make &在命令行中运行,发送了SIGSTOP,并使用ps;检查了进程状态。它被列为已停止(并在我发送SIGCONT时再次启动),但它仍在喷射输出并提高核心温度!使用Ctrl-Z停止它从来没有这个问题,但是我不知道如何在脚本中做到这一点。 是什么使Ctrl-Z与有所不同kill -STOP,以及如何在Shell脚本中获得前者的行为?

6
Telnet发送Ctrl-C
我使用telnet连接到终端服务器,该服务器代理到RS-232端口的通信。 不幸的是,在使用某些设备时,无法发送CTRL+ C字符(0x03)。似乎没有发送字符,而是本地客户端捕获了击键,而我处于“其他模式”。我想要的只是发送一个角色。 为了调试,我一直在玩: ^] toggle termdata 和 ^] toggle options 当我在不起作用的终端服务器上按CTRL+ 时,会发生以下情况C: telnet 10.10.129.101 2012 Trying 10.10.129.101... Connected to termserv-val3 (10.10.129.101). Escape character is '^]'. ^] telnet> toggle options Will show option processing. ^] telnet> toggle termdata Will print hexadecimal representation of terminal traffic. SENT IAC IP SENT DO …

4
捕获SIGINT等时保留出口代码吗?
如果我在退出之前使用trap了http://linuxcommand.org/wss0160.php#trap上所述的捕获ctrl-c(或类似文件)和清理功能,那么我将更改返回的退出代码。 现在,这在现实世界中可能不会有所作为(例如,因为退出代码不是可移植的,而且如进程终止时默认退出代码中所讨论的那样,退出代码并不总是明确的?),但我仍然想知道是否存在真的没有办法防止这种情况,而是返回被中断脚本的默认错误代码吗? 示例(在bash中,但我的问题不应被视为bash特定): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 输出: $ ./test.sh …

2
ssh连接断开后,为什么我的wget没死?
我ssh到服务器上运行wget -r -np zzz.aaa/bbb/ccc,它开始工作。然后我的互联网连接(在我家里)被打断了,我担心那wget是hup因为ssh连接丢失而导致ping 终止了,所以终端已经死了。但是后来我ssh向服务器了解到它仍在运行,并将输出放入wget.log并下载内容。有人可以告诉我这里可能发生了什么吗? 这就是ps给我的: PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 32283 0.6 29.4 179824 147088 ? S 14:00 1:53 wget -r -np zzz.aaa/bbb/ccc (问号)?在“”列中是tty什么意思?
13 ssh  terminal  wget  signals 

2
在zsh中取消完成,但仅完成
当完成功能需要很长时间时,我可以通过按Ctrl+ C(终端中断键,发送SIGINT)或Ctrl+ G(绑定到send-break)来中断它。然后,我留下未完成的单词。 但是,如果我恰好在完成功能完成时按Ctrl+ C或Ctrl+ G,则按键可能会取消命令行并给我一个新的提示,而不是取消完成。 如何设置zsh,以便某个键将取消正在进行的完成,但是如果没有完成功能处于活动状态,则什么也不做?

1
如何像bash一样暂停和恢复进程
该问题是针对以下问题的后续措施:如何暂停和恢复流程 我已经从gnome-terminal中的bash会话开始使用Firefox。 流程树如下所示: $ ps -e -o pid,ppid,cmd -H 1828 1 gnome-terminal 26677 1828 bash 27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox 27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin 27989 27985 /usr/lib/firefox-3.6.15/firefox-bin 28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true 当我击中CTRL+Zbash时,它将暂停Firefox。当我发出命令bg(或fg)时,它将恢复Firefox。这是预期的。 当我kill -s SIGTSTP 27980在另一个终端中发出命令时,它将[1]+ Stopped firefox在第一个终端中打印该行(就像我按时一样CTRL+Z),但是它不会挂起firefox。我假设它只是挂起外壳脚本。 当我kill -s SIGTSTP 27989在另一个终端中发出命令(注意PID)时,它将暂停Firefox。第一终端不注意这一点。 bash如何暂停整个进程树?它只是遍历所有树和SIGTSTP的所有子级吗?


3
控制哪个进程被Ctrl + C取消
我有一张能引导至Linux并运行小型Bash脚本的现场CD。该脚本搜索并运行第二个程序(通常是已编译的C ++二进制文件)。 您应该可以通过按Ctrl+ 中止第二个程序C。什么应该发生的是,第二个节目暂停,和bash脚本运行继续清理。什么实际发生的是主应用程序和bash脚本都终止。这是一个问题。 因此,我使用trap内置函数告诉Bash忽略SIGINT。现在Ctrl+ C终止C ++应用程序,但是Bash继续运行。大。 哦,是的...有时“第二个应用程序”是另一个Bash脚本。在那种情况下,Ctrl+ C现在什么也不做。 显然,我对这些工作原理的理解是错误的……当用户按下Ctrl+ 时,如何控制哪个进程获取SIGINT C?我只想将这个信号引导到一个特定的过程。
13 bash  signals 

2
在Linux上等效于“ truss -T”和“ truss -U”?
是否有与Solaris实用程序的-Tand -U选项truss在Linux上等效的功能。 这些用于指定系统调用(-T)或库函数(-U),当被跟踪的应用程序调用该函数时,该函数将导致其停止。 或者,换句话说,我希望由跟踪的应用程序启动的任何进程在进行给定的系统调用或给定的共享库函数调用时立即停止(好像被SIGSTOP杀死)。 strace并且ltrace在Linux上提供了Solaris的许多功能集truss,但他们似乎并没有这么做。 例如: truss -f -T open cmd 会是这样strace -f cmd,只是如果在执行过程中cmd或任何其后代做任何open系统调用时,它会立即停止(我可以在我方便以后恢复它) 在某些情况下,我可以使用gdb的catch syscall,但我一直在寻找一种解决方案,可以方便地遵循forks并继续对所有分叉的过程进行处理,即使在execves 之后也继续进行处理。 我似乎想起了一些提供相同功能的实用程序,甚至是在远程发生某些系统调用之间,甚至一步一步地向单步应用程序(或同一实用程序的选项),但我的记忆力却使我失望了,我什至无法确定在Linux上。

3
终端仿真器在收到SIGKILL后如何杀死他们的孩子?
据我了解,SIGKILL不能被抓住。这意味着一个进程没有时间在操作系统销毁它之前杀死它的孩子。这可以通过shell脚本来演示。 #! /bin/bash trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless. mplayer video.avi 使用SIGKILL杀死它会使mplayer运行。 $ kill -9 $pid 但是,当使用终端仿真器(xterm,Terminal,...)时,子进程会被杀死。这怎么可能? $ mplayer 并杀死它: $ kill -9 $terminal_pid 而mplayer随船而去。终端仿真器是否以某种方式赶上了SIGKILL,或者这里还有其他力量在起作用?

2
GNU Linux(Arch Linux)上的SIGINFO丢失
我正在开发一个应用程序,我希望它可以根据需要将一些运行时统计信息打印到控制台。kill我立刻想到了信号。 阅读Wiki上的Unix信号SIGINFO似乎是一种可行的方法,因为: 它旨在为这些目的 如果未实现信号处理程序,则不终止进程(与SIGUSRx- 相反,请参见此处) 但是,通过检查的输出kill -l,看来我的服务器没有实现此信号。 我的问题是: 为什么SIGINFO我的系统不见了?所有GNU Linux系统上都不存在吗? 是否有一种简单的方法(即没有内核/ glibc重新编译)来启用此信号?如果没有,那么困难的方法是什么? 我可以为目标使用什么替代信号,如果目标过程未处理,则不会产生任何副作用?(由于我在glibc的手册上找不到任何其他合适的信号,因此我已经假设没有) Linux metainfo: Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux 更新:我仍在寻找有关为何有条件将此信号从BSD以外的其他系统中排除的更多信息(请参阅下面的评论)。该信号似乎对许多目的都非常有用,因此我很难相信这只是个一时兴起的事情-那么该信号在Linux上的真正表现是什么呢?
12 linux  signals  glibc 

1
命令pkill -USR1 -n -x dd到底是什么意思?
我dd用来将磁盘映像网络传输到BeagleBone上的sd卡上。 pkill -USR1 -n -x dd在此BeagleBone的ssh连接中使用时,会为我提供传输过程的状态更新,这很棒。我很好奇它实际上是如何工作的,所以我将来可以有效地使用它。 阅读后,man pkill它仍然没有完全解释如何pkill -USR1 -n -x dd为我提供这一非常有用的状态更新。
12 kill  dd  signals 

3
陷阱命令中的信号0是什么?
我正在遵循本指南,了解如何使用ssh-agent设置无密码SSH身份验证。 为了启动ssh-agent,作者建议使用以下代码.bash_profile: SSHAGENT=/usr/bin/ssh-agent SSHAGENTARGS="-s" if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then eval `$SSHAGENT $SSHAGENTARGS` trap "kill $SSH_AGENT_PID" 0 fi 我不明白为什么它会捕获信号0。根据man 7信号,没有这样的信号。 这仅仅是错别字或错误,还是真的有成就?
12 bash  signals  trap 

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.