el tests
[fedora-idea.git] / tools / DumpThreads / AppMain.c
blobbf4603365dac4d5e933ea48fe708c1826164449e
2 #if defined(WIN32)
3 #include <windows.h>
4 #else
5 #include <jni.h>
6 #include <signal.h>
7 #include <unistd.h>
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
12 int isKernel26OrHigher();
13 #endif
15 JNIEXPORT void JNICALL Java_com_intellij_rt_execution_application_AppMain_triggerControlBreak
16 (JNIEnv *env, jclass clazz) {
17 #if defined(WIN32)
18 GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0);
19 #else
20 if (isKernel26OrHigher()) {
21 kill (getpid(), SIGQUIT);
22 } else {
23 int ppid = getppid();
24 char buffer[1024];
25 sprintf(buffer, "/proc/%d/status", ppid);
26 FILE * fp;
27 if ( (fp = fopen(buffer, "r")) != NULL )
29 char s[124];
30 char * ppid_name = "PPid:";
31 while (fscanf (fp, "%s\n", s) > 0) {
32 if (strcmp(s, ppid_name) == 0) {
33 int pppid;
34 fscanf(fp, "%d", &pppid);
35 kill (pppid, SIGQUIT);
36 break;
40 fclose (fp);
43 #endif
46 #ifndef WIN32
48 int isKernel26OrHigher() {
49 char buffer[1024];
50 FILE * fp;
51 if ( (fp = fopen("/proc/version", "r")) != NULL )
53 int major;
54 int minor;
55 fscanf(fp, "Linux version %d.%d", &major, &minor);
56 fclose (fp);
57 if (major < 2) return 0;
58 if (major == 2) return minor >= 6;
59 return 1;
62 return 0;
64 #endif