2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
27 int isKernel26OrHigher();
30 JNIEXPORT
void JNICALL Java_com_intellij_rt_execution_application_AppMain_triggerControlBreak
31 (JNIEnv
*env
, jclass clazz
) {
33 GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT
, 0);
35 if (isKernel26OrHigher()) {
36 kill (getpid(), SIGQUIT
);
40 sprintf(buffer
, "/proc/%d/status", ppid
);
42 if ( (fp
= fopen(buffer
, "r")) != NULL
)
45 char * ppid_name
= "PPid:";
46 while (fscanf (fp
, "%s\n", s
) > 0) {
47 if (strcmp(s
, ppid_name
) == 0) {
49 fscanf(fp
, "%d", &pppid
);
50 kill (pppid
, SIGQUIT
);
63 int isKernel26OrHigher() {
66 if ( (fp
= fopen("/proc/version", "r")) != NULL
)
70 fscanf(fp
, "Linux version %d.%d", &major
, &minor
);
72 if (major
< 2) return 0;
73 if (major
== 2) return minor
>= 6;