Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 发送信号的时间域命令似乎不起作用_Linux_Bash - Fatal编程技术网

Linux 发送信号的时间域命令似乎不起作用

Linux 发送信号的时间域命令似乎不起作用,linux,bash,Linux,Bash,我一直在试验time命令(/usr/bin/time)。我使time命令如下所示运行 /usr/bin/time -v sleep 30 在另一个终端上,我做了一个ps-a并找到了sleep进程的PID。现在,我使用kill-1PID向睡眠发送一条消息,终止了进程睡眠。由于睡眠是按时间运行的,它列出了资源使用统计信息,如下所示 Command being timed: "sleep 30" User time (seconds): 0.00 System time (seconds): 0.0

我一直在试验time命令(/usr/bin/time)。我使time命令如下所示运行

/usr/bin/time -v sleep 30
在另一个终端上,我做了一个
ps-a
并找到了
sleep
进程的PID。现在,我使用
kill-1PID
向睡眠发送一条消息,终止了进程睡眠。由于睡眠是按时间运行的,它列出了资源使用统计信息,如下所示

Command being timed: "sleep 30"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:21.81
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2160
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 180
Voluntary context switches: 2
Involuntary context switches: 2
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
然而,令我惊讶的是,信号传递字段的值为0!这怎么可能

编辑:

我没有使用
sleep30
,而是尝试了以下脚本

trap "echo Hello" 1 2
sleep 30

现在我对上面的脚本进行计时,并向其发送信号1和2。在这种情况下,信号传递字段仍然为0。这使我得出结论,信号传递字段为0,这不是因为信号未被处理。

我正在使用此程序:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

volatile unsigned int counter=0;

void exithandler(int signum)
{
_exit(1);
}

void ignorehandler(int signum)
{
counter += signum;
}

int main(int argc, char **argv)
{

int delay;

signal ( SIGHUP, ignorehandler );
signal ( SIGQUIT, exithandler );
for (delay = atoi(argv[1] ); delay > 0; ) {
        delay = sleep( delay);
        }

printf("Counter=%u\n", counter);
return 0;
}

时间利用了wait4系统调用。我发现structrusage的一些字段仍然没有维护。ru_nsignals是structrusage中的一个这样的字段。
有关详细信息,请参阅此问题的正确答案

我的猜测是,由于睡眠进程未安装处理程序,因此信号从未发送。由于有一个DFLT或IGN处理程序“set”,内核在传递信号之前终止进程。(向一个不存在处理程序的进程发送信号无论如何都是无用的。)@wildplasser我已经编辑了这个问题。我得出的结论是,不处理信号不是发送信号的0值的原因。我在问原因!我知道。我只是想避免您(或其他人)必须重新键入相同的内容。顺便说一句:即使在上面的程序中添加了getrusage()之后,.ru_nsignals仍然是零。
Plasser@pisbak>$ Counter=11
Command being timed: "./mysleep 20"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:22.56
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1856
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 163
Voluntary context switches: 13
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
[1]+  Done                    /usr/bin/time -v ./mysleep 20
Plasser@pisbak>$ man getrusage