pthread_create
我使用实用程序创建了 3 个线程 。我可以使用
kill -SIGUSR1 thread-id
.
我使用 ps -eLF
命令( LWP 字段)获得了线程 ID。
我想知道:
为什么我们需要杀戮?
如何使用 kill 命令向线程组 ID 发送信号?我如何找到组 id ?
pthread_create
我使用实用程序创建了 3 个线程 。我可以使用
kill -SIGUSR1 thread-id
.
我使用 ps -eLF
命令( LWP 字段)获得了线程 ID。
我想知道:
为什么我们需要杀戮?
如何使用 kill 命令向线程组 ID 发送信号?我如何找到组 id ?
线程组标识符(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
[...]
你需要kill
,因为那是发送信号的命令。默认情况下,它会杀死一个进程,但你可以发送你知道的其他信号。
您可以使用killall -s <signal number> <executable name>
向共享相同进程名称(而不是编号)的所有进程发送信号。