Mark Mitchell, Jeffrey Oldham 및 Alex Samuel의 Advanced Linux Programming 이 책을 보겠습니다 . 2001 년부터 시작 됐습니다. 그러나 어쨌든 나는 그것을 아주 좋아합니다.
그러나 리눅스가 쉘 출력에서 생성하는 것과 다른 시점에 도달했습니다. 92 페이지 (뷰어에서 116)에서 4.5 장 GNU / 리눅스 스레드 구현은이 문장을 포함하는 단락으로 시작합니다.
GNU / Linux에서 POSIX 스레드의 구현은 다른 많은 UNIX 유사 시스템에서의 스레드 구현과 중요한 방식으로 다릅니다. GNU / Linux에서는 스레드가 프로세스로 구현됩니다.
이것은 요점처럼 보이며 나중에 C 코드로 설명됩니다. 이 책의 결과는 다음과 같습니다.
main thread pid is 14608
child thread pid is 14610
그리고 우분투 16.04에서는 다음과 같습니다.
main thread pid is 3615
child thread pid is 3615
ps
출력이이를 지원합니다.
2001 년과 지금 사이에 뭔가 바뀌었을 것 같습니다.
다음 페이지의 다음 하위 챕터 4.5.1 신호 처리는 이전 명령문에서 빌드됩니다.
신호와 스레드 간의 상호 작용 동작은 UNIX 계열 시스템마다 다릅니다. GNU / Linux에서 스레드는 프로세스로 구현된다는 사실에 따라 동작이 결정됩니다.
그리고 이것은이 책의 뒷부분에서 훨씬 더 중요해 보일 것입니다. 누군가 여기서 무슨 일이 일어나고 있는지 설명해 주시겠습니까?
나는 이것을 보았다. 리눅스 커널 스레드는 실제로 커널 프로세스인가? 별로 도움이되지는 않습니다. 혼란 스러워요.
이것은 C 코드입니다.
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_function (void* arg)
{
fprintf (stderr, "child thread pid is %d\n", (int) getpid ());
/* Spin forever. */
while (1);
return NULL;
}
int main ()
{
pthread_t thread;
fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
pthread_create (&thread, NULL, &thread_function, NULL);
/* Spin forever. */
while (1);
return 0;
}
getpid
라고하는 것을 반환 하고 사용해야하는 프로세스의 고유 ID를 얻습니다 . 그러나 대부분의 사람과 도구는 커널 이외의 다른 시스템과의 일관성을 위해 스레드 그룹을 프로세스라고하고 프로세스를 스레드라고합니다. gettid