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()相同的值。

使用该ps命令,线程组标识符通过tgid格式说明符获得。通过以下ps命令,我们可以看到pid = tgid = tid的行是进程的主线程:

$ 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 回答