FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cloudstack/utils/src/com/cloud/utils/ProcessUtil.java at 4.2 · kwanggithub/cloudstack · GitHub
This repository was archived by the owner on Jan 15, 2020. It is now read-only.
kwanggithub
/
cloudstack
Public archive
forked from
apache/cloudstack
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cloudstack
/
utils
/
src
/
com
/
cloud
/
utils
/
ProcessUtil.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
122 lines (107 loc) · 4.98 KB
Breadcrumbs
cloudstack
/
utils
/
src
/
com
/
cloud
/
utils
/
ProcessUtil.java
Copy path
File metadata and controls
122 lines (107 loc) · 4.98 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package
com
.
cloud
.
utils
;
import
java
.
io
.
BufferedReader
;
import
java
.
io
.
File
;
import
java
.
io
.
FileInputStream
;
import
java
.
io
.
FileOutputStream
;
import
java
.
io
.
IOException
;
import
java
.
io
.
InputStreamReader
;
import
javax
.
naming
.
ConfigurationException
;
import
org
.
apache
.
log4j
.
Logger
;
import
com
.
cloud
.
utils
.
PropertiesUtil
;
import
com
.
cloud
.
utils
.
exception
.
CloudRuntimeException
;
import
com
.
cloud
.
utils
.
script
.
OutputInterpreter
;
import
com
.
cloud
.
utils
.
script
.
Script
;
import
java
.
util
.
Properties
;
public
class
ProcessUtil
{
private
static
final
Logger
s_logger
=
Logger
.
getLogger
(
ProcessUtil
.
class
.
getName
());
// paths cannot be hardcoded
public
static
void
pidCheck
(
String
pidDir
,
String
run
)
throws
ConfigurationException
{
String
dir
=
pidDir
==
null
?
"/var/run"
:
pidDir
;
try
{
final
File
propsFile
=
PropertiesUtil
.
findConfigFile
(
"environment.properties"
);
if
(
propsFile
==
null
) {
s_logger
.
debug
(
"environment.properties could not be opened"
);
}
else
{
final
FileInputStream
finputstream
=
new
FileInputStream
(
propsFile
);
final
Properties
props
=
new
Properties
();
props
.
load
(
finputstream
);
finputstream
.
close
();
dir
=
props
.
getProperty
(
"paths.pid"
);
if
(
dir
==
null
) {
dir
=
pidDir
==
null
?
"/var/run"
:
pidDir
;
}
}
}
catch
(
IOException
e
) {
s_logger
.
debug
(
"environment.properties could not be opened"
);
}
final
File
pidFile
=
new
File
(
dir
+
File
.
separator
+
run
);
try
{
if
(!
pidFile
.
createNewFile
()) {
if
(!
pidFile
.
exists
()) {
throw
new
ConfigurationException
(
"Unable to write to "
+
pidFile
.
getAbsolutePath
() +
". Are you sure you're running as root?"
);
}
final
FileInputStream
is
=
new
FileInputStream
(
pidFile
);
final
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
is
));
final
String
pidLine
=
reader
.
readLine
();
if
(
pidLine
==
null
) {
throw
new
ConfigurationException
(
"Java process is being started twice. If this is not true, remove "
+
pidFile
.
getAbsolutePath
());
}
try
{
final
long
pid
=
Long
.
parseLong
(
pidLine
);
final
Script
script
=
new
Script
(
"bash"
,
120000
,
s_logger
);
script
.
add
(
"-c"
,
"ps -p "
+
pid
);
final
String
result
=
script
.
execute
();
if
(
result
==
null
) {
throw
new
ConfigurationException
(
"Java process is being started twice. If this is not true, remove "
+
pidFile
.
getAbsolutePath
());
}
if
(!
pidFile
.
delete
()) {
throw
new
ConfigurationException
(
"Java process is being started twice. If this is not true, remove "
+
pidFile
.
getAbsolutePath
());
}
if
(!
pidFile
.
createNewFile
()) {
throw
new
ConfigurationException
(
"Java process is being started twice. If this is not true, remove "
+
pidFile
.
getAbsolutePath
());
}
}
catch
(
final
NumberFormatException
e
) {
throw
new
ConfigurationException
(
"Java process is being started twice. If this is not true, remove "
+
pidFile
.
getAbsolutePath
());
}
}
pidFile
.
deleteOnExit
();
final
Script
script
=
new
Script
(
"bash"
,
120000
,
s_logger
);
script
.
add
(
"-c"
,
"echo $PPID"
);
final
OutputInterpreter
.
OneLineParser
parser
=
new
OutputInterpreter
.
OneLineParser
();
script
.
execute
(
parser
);
final
String
pid
=
parser
.
getLine
();
final
FileOutputStream
strm
=
new
FileOutputStream
(
pidFile
);
strm
.
write
((
pid
+
"
\n
"
).
getBytes
());
strm
.
close
();
}
catch
(
final
IOException
e
) {
throw
new
CloudRuntimeException
(
"Unable to create the "
+
pidFile
.
getAbsolutePath
() +
". Are you running as root?"
,
e
);
}
}
public
static
String
dumpStack
() {
StringBuilder
sb
=
new
StringBuilder
();
StackTraceElement
[]
elems
=
Thread
.
currentThread
().
getStackTrace
();
if
(
elems
!=
null
&&
elems
.
length
>
0
) {
for
(
StackTraceElement
elem
:
elems
) {
sb
.
append
(
"
\t
at "
).
append
(
elem
.
getMethodName
()).
append
(
"("
).
append
(
elem
.
getFileName
()).
append
(
":"
).
append
(
elem
.
getLineNumber
()).
append
(
")
\n
"
);
}
}
return
sb
.
toString
();
}
}
Back
|
FazBrowse Home
|
New Git URL