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