Linux命令“kill”可以向线程发送信号

时间:2012-12-12 09:56:02

标签: linux multithreading pthreads

我使用pthread_create实用程序创建了3个线程。我可以使用
向线程发送信号 kill -SIGUSR1 thread-id

我使用ps -eLF命令(LWP字段)获得了线程ID。

我想知道

  1. 为什么我们需要tkill

  2. 如何使用kill命令向线程组ID发送信号。 (我如何找到组ID?)

2 个答案:

答案 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>向共享相同进程名称(而不是数字)的所有进程发送信号。