1

私はtimeコマンド(/ usr / bin / time)を試してきました。タイムコマンドを以下のように実行させました

/usr/bin/time -v sleep 30

もう一方の端末でプロセスps -aのPIDを確認しました。これで、プロセスsleepのスリープを終了したスリープにメッセージを送信しますkill -1 PID。スリープは時間の問題で実行されていたため、リソース使用量の統計を以下のようにリストしました。

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

しかし、驚いたことに、Signals Deliveredフィールドには0があります!そんなことがあるものか?

編集:

の代わりにsleep 30、次のスクリプトを試してみました。

trap "echo Hello" 1 2
sleep 30

次に、上記のスクリプトの時間を計り、シグナル1と2をスクリプトに送信します。その場合も、Signals Deliveredフィールドはまだ0でした。これにより、Signals Deliveredフィールドは0であると結論付けられます。これは、シグナルが処理されていないためではありません。

4

2 に答える 2

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;
}

、および同様の結果が得られます(11 SIGHUPSの後、明らかに):

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
于 2013-01-23T13:03:31.403 に答える
0

時間はwait4システムコールを利用します。構造体のrusageのいくつかのフィールドが維持されていないことを発見しました。ru_nsignalsは、structrusageのそのようなフィールドの1つです。詳細については、この質問に対する正しい答えを参照してください

于 2013-01-23T14:07:04.190 に答える