Вы можете использовать интерфейс JNI для вызова функции POSIX getpid(). Это довольно прямолинейно. Вы начинаете с класса для функций POSIX, которые вам нужны. Я называю это POSIX.java
:
import java.util.*;
class POSIX
{
static { System.loadLibrary ("POSIX"); }
native static int getpid();
}
Собирать с
$ javac POSIX.java
После этого сгенерировать файл заголовка POSIX.h
с
$ javah -jni POSIX
Заголовочный файл содержит прототип C для функции с обертками функция getpid. Теперь вам нужно реализовать функцию, что довольно просто. Я сделал это в POSIX.c
:
#include "POSIX.h"
#include <sys/types.h>
#include <unistd.h>
JNIEXPORT jint JNICALL Java_POSIX_getpid (JNIEnv *env, jclass cls)
{
return getpid();
}
Теперь вы можете скомпилировать его с помощью GCC:
$ gcc -Wall -I/usr/lib/jvm/java-1.6.0-sun-1.6.0.21/include -I/usr/lib/jvm/java-1.6.0-sun-1.6.0.21/include/linux -o libPOSIX.so -shared -Wl,-soname,libPOSIX.so POSIX.c -static -lc
Вы должны указать место, где установлен ваш Java. Это все. Теперь вы можете использовать его. Создание простой GETPID программы:
public class getpid
{
public static void main (String argv[])
{
System.out.println (POSIX.getpid());
}
}
Собирать с javac getpid.java
и запустить его:
$ java getpid &
[1] 21983
$ 21983
Первый PID написана оболочкой и второй записываются программой Java после приглашения оболочки вернулось , ∎
Process.pid больше не работает, по крайней мере, с jruby 1.7.23 – 2016-02-29 18:01:30