26 Mayıs 2017 Cuma

getpid metodu

Giriş
Get process id demek. Şöyle yaparız.
pid_t pid = getpid();
İki thread aynı uygulama içinde çalıştıkları için getpid() metodu aynı değeri döner. Eski C kütüphanelerinde NPTL kullanılmadığı için dönmüyor! getpid kernel'da şuna benzer bir şeye tekabül eder.
static inline pid_t sys_getpid(void)
{
  pid_t pid;
  asm volatile("int %1\n"
             : "=a" (pid)
             : "i" (INT_SYS_GETPID)
             : "cc", "memory");
  return pid;
}

Örnek
Şöyle yaparız.
#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;
}
Çıktı olarak şunu alırız.
main thread pid is 3615
child thread pid is 3615

Hiç yorum yok:

Yorum Gönder