2

pthread_createユーティリティを使用して 3 つのスレッドを作成しまし た。を使用してスレッドにシグナルを送信できます
kill -SIGUSR1 thread-id

ps -eLFコマンド ( LWP フィールド )を使用してスレッド ID を取得し ました。

不思議なんだけど:

  1. なぜ殺す必要があるのですか?

  2. kill コマンドを使用してスレッド グループ ID にシグナルを送信するにはどうすればよいですか? グループ ID を見つけるにはどうすればよいですか?

4

2 に答える 2

2

スレッド グループ識別子 (TGID) は、実際にはプロセスのメイン スレッドのタスク識別子です。また、メインスレッドのタスク識別子は、プロセス全体のプロセス識別子です。これは、同じプロセス内の任意のスレッドからgetpid()によって返される値です。つまり、gettid()は、メイン スレッドのgetpid()と同じ値を返します。

このコマンドでは、 tgid書式指定子psを使用してスレッド グループ識別子を取得します。次のコマンドを使用すると、pid = tgid = tidの行がプロセスのメイン スレッドであることがわかります。ps

$ ps -eLo pid,tgid,tid,comm
    PID    TGID     TID COMMAND
    890     890     890 rsyslogd     <-- Main thread = thread group id
    890     890     915 in:imuxsock
    890     890     916 in:imklog
    890     890     917 rs:main Q:Reg
    891     891     891 snapd        <-- Main thread = thread group id
    891     891     934 snapd
    891     891     935 snapd
    891     891     936 snapd
    891     891     937 snapd
    891     891     938 snapd
    891     891    1000 snapd
    891     891    1006 snapd
    891     891    1007 snapd
    891     891    1009 snapd
    891     891    1010 snapd
    891     891    1042 snapd
    891     891    1043 snapd
    891     891    1062 snapd
    891     891    1063 snapd
    891     891    1064 snapd
    891     891    1542 snapd
    891     891    1544 snapd
[...]

于 2020-12-22T08:18:51.077 に答える
1

killこれはシグナルを送信するためのコマンドであるため、必要です。デフォルトではプロセスを強制終了しますが、ご存知のように他のシグナルを送信できます。

を使用killall -s <signal number> <executable name>して、同じプロセス名 (番号ではない) を共有するすべてのプロセスにシグナルを送信できます。

于 2012-12-12T10:07:56.587 に答える