Вы можете использовать интерфейс 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 после возвращения приглашения оболочки. ∎