pidify 0.1.2-i686-linux
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/classes/Pidify.html +338 -0
- data/doc/classes/Pidify.src/M000001.html +18 -0
- data/doc/classes/Pidify.src/M000002.html +19 -0
- data/doc/classes/Pidify.src/M000003.html +18 -0
- data/doc/classes/Pidify.src/M000004.html +18 -0
- data/doc/classes/Pidify.src/M000005.html +20 -0
- data/doc/classes/Pidify.src/M000006.html +18 -0
- data/doc/classes/Pidify.src/M000007.html +18 -0
- data/doc/classes/Pidify.src/M000008.html +19 -0
- data/doc/classes/Pidify.src/M000009.html +31 -0
- data/doc/created.rid +1 -0
- data/doc/files/pidify_rb.html +146 -0
- data/doc/fr_class_index.html +27 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +35 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/pidify.rb +197 -0
- metadata +65 -0
@@ -0,0 +1,338 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
+
<head>
|
8
|
+
<title>Module: Pidify</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
|
12
|
+
<script type="text/javascript">
|
13
|
+
// <![CDATA[
|
14
|
+
|
15
|
+
function popupCode( url ) {
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
+
}
|
18
|
+
|
19
|
+
function toggleCode( id ) {
|
20
|
+
if ( document.getElementById )
|
21
|
+
elem = document.getElementById( id );
|
22
|
+
else if ( document.all )
|
23
|
+
elem = eval( "document.all." + id );
|
24
|
+
else
|
25
|
+
return false;
|
26
|
+
|
27
|
+
elemStyle = elem.style;
|
28
|
+
|
29
|
+
if ( elemStyle.display != "block" ) {
|
30
|
+
elemStyle.display = "block"
|
31
|
+
} else {
|
32
|
+
elemStyle.display = "none"
|
33
|
+
}
|
34
|
+
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Make codeblocks hidden by default
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
+
|
41
|
+
// ]]>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<div id="classHeader">
|
50
|
+
<table class="header-table">
|
51
|
+
<tr class="top-aligned-row">
|
52
|
+
<td><strong>Module</strong></td>
|
53
|
+
<td class="class-name-in-header">Pidify</td>
|
54
|
+
</tr>
|
55
|
+
<tr class="top-aligned-row">
|
56
|
+
<td><strong>In:</strong></td>
|
57
|
+
<td>
|
58
|
+
<a href="../files/pidify_rb.html">
|
59
|
+
pidify.rb
|
60
|
+
</a>
|
61
|
+
<br />
|
62
|
+
</td>
|
63
|
+
</tr>
|
64
|
+
|
65
|
+
</table>
|
66
|
+
</div>
|
67
|
+
<!-- banner header -->
|
68
|
+
|
69
|
+
<div id="bodyContent">
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
<div id="contextContent">
|
74
|
+
|
75
|
+
<div id="description">
|
76
|
+
<p>
|
77
|
+
Use the module methods in <a href="Pidify.html">Pidify</a> to save/delete
|
78
|
+
the PID of a running script, or kill a running script using a saved PID.
|
79
|
+
</p>
|
80
|
+
<p>
|
81
|
+
Example:
|
82
|
+
</p>
|
83
|
+
<pre>
|
84
|
+
require 'pidify'
|
85
|
+
Pidify.running? # => false
|
86
|
+
Pidify.start
|
87
|
+
Pidify.running? # => true
|
88
|
+
puts "I am running with PID #{Pidify.pid}!"
|
89
|
+
Pidify.stop
|
90
|
+
Pidify.running? # => false
|
91
|
+
</pre>
|
92
|
+
<p>
|
93
|
+
A more useful example:
|
94
|
+
</p>
|
95
|
+
<pre>
|
96
|
+
require 'pidify'
|
97
|
+
require 'daemons'
|
98
|
+
Signal.trap('INT') { Pidify.stop; exit }
|
99
|
+
module Doer
|
100
|
+
def self.start
|
101
|
+
puts "starting"
|
102
|
+
raise "Failed to start: already running (PID file exists)." if Pidify.running?
|
103
|
+
Daemons.daemonize
|
104
|
+
Pidify.start
|
105
|
+
loop do
|
106
|
+
puts "hello world"
|
107
|
+
sleep 1
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
if ARGV.include? 'stop'
|
112
|
+
Pidify.stop
|
113
|
+
puts "Daemon stopped."
|
114
|
+
else
|
115
|
+
puts "Daemon starting."
|
116
|
+
Doer.start
|
117
|
+
end
|
118
|
+
</pre>
|
119
|
+
|
120
|
+
</div>
|
121
|
+
|
122
|
+
|
123
|
+
</div>
|
124
|
+
|
125
|
+
<div id="method-list">
|
126
|
+
<h3 class="section-bar">Methods</h3>
|
127
|
+
|
128
|
+
<div class="name-list">
|
129
|
+
<a href="#M000007">delete_pid</a>
|
130
|
+
<a href="#M000005">pid</a>
|
131
|
+
<a href="#M000001">pid_directory</a>
|
132
|
+
<a href="#M000002">pid_directory=</a>
|
133
|
+
<a href="#M000003">pid_file</a>
|
134
|
+
<a href="#M000004">running?</a>
|
135
|
+
<a href="#M000006">save_pid</a>
|
136
|
+
<a href="#M000008">start</a>
|
137
|
+
<a href="#M000009">stop</a>
|
138
|
+
</div>
|
139
|
+
</div>
|
140
|
+
|
141
|
+
</div>
|
142
|
+
|
143
|
+
|
144
|
+
<!-- if includes -->
|
145
|
+
|
146
|
+
<div id="section">
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
<!-- if method_list -->
|
156
|
+
<div id="methods">
|
157
|
+
<h3 class="section-bar">Public Class methods</h3>
|
158
|
+
|
159
|
+
<div id="method-M000007" class="method-detail">
|
160
|
+
<a name="M000007"></a>
|
161
|
+
|
162
|
+
<div class="method-heading">
|
163
|
+
<a href="Pidify.src/M000007.html" target="Code" class="method-signature"
|
164
|
+
onclick="popupCode('Pidify.src/M000007.html');return false;">
|
165
|
+
<span class="method-name">delete_pid</span><span class="method-args">()</span>
|
166
|
+
</a>
|
167
|
+
</div>
|
168
|
+
|
169
|
+
<div class="method-description">
|
170
|
+
<p>
|
171
|
+
Deletes the PID file. Calling stop calls this automatically, but will also
|
172
|
+
try to send a kill signal to the running process, if it is different from
|
173
|
+
this one. BEWARE that this tries to delete whatever file is returned by <a
|
174
|
+
href="Pidify.html#M000003">pid_file</a> and does no error checking on it!
|
175
|
+
</p>
|
176
|
+
</div>
|
177
|
+
</div>
|
178
|
+
|
179
|
+
<div id="method-M000005" class="method-detail">
|
180
|
+
<a name="M000005"></a>
|
181
|
+
|
182
|
+
<div class="method-heading">
|
183
|
+
<a href="Pidify.src/M000005.html" target="Code" class="method-signature"
|
184
|
+
onclick="popupCode('Pidify.src/M000005.html');return false;">
|
185
|
+
<span class="method-name">pid</span><span class="method-args">()</span>
|
186
|
+
</a>
|
187
|
+
</div>
|
188
|
+
|
189
|
+
<div class="method-description">
|
190
|
+
<p>
|
191
|
+
Returns the PID stored in the <a href="Pidify.html#M000003">pid_file</a>
|
192
|
+
(not necessarily the PID of this script).
|
193
|
+
</p>
|
194
|
+
</div>
|
195
|
+
</div>
|
196
|
+
|
197
|
+
<div id="method-M000001" class="method-detail">
|
198
|
+
<a name="M000001"></a>
|
199
|
+
|
200
|
+
<div class="method-heading">
|
201
|
+
<a href="Pidify.src/M000001.html" target="Code" class="method-signature"
|
202
|
+
onclick="popupCode('Pidify.src/M000001.html');return false;">
|
203
|
+
<span class="method-name">pid_directory</span><span class="method-args">()</span>
|
204
|
+
</a>
|
205
|
+
</div>
|
206
|
+
|
207
|
+
<div class="method-description">
|
208
|
+
<p>
|
209
|
+
Returns the Pathname of the PID storage directory (defaults to /var/run).
|
210
|
+
</p>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
|
214
|
+
<div id="method-M000002" class="method-detail">
|
215
|
+
<a name="M000002"></a>
|
216
|
+
|
217
|
+
<div class="method-heading">
|
218
|
+
<a href="Pidify.src/M000002.html" target="Code" class="method-signature"
|
219
|
+
onclick="popupCode('Pidify.src/M000002.html');return false;">
|
220
|
+
<span class="method-name">pid_directory=</span><span class="method-args">(dir)</span>
|
221
|
+
</a>
|
222
|
+
</div>
|
223
|
+
|
224
|
+
<div class="method-description">
|
225
|
+
<p>
|
226
|
+
Sets the PID storage directory (defaults to /var/run). Be VERY CAREFUL
|
227
|
+
using this, as <a href="Pidify.html#M000007">delete_pid</a> will try to
|
228
|
+
delete whatever file it thinks is the <a
|
229
|
+
href="Pidify.html#M000003">pid_file</a> for this script in the <a
|
230
|
+
href="Pidify.html#M000001">pid_directory</a>. It’s probably a good
|
231
|
+
idea not to change this at all.
|
232
|
+
</p>
|
233
|
+
</div>
|
234
|
+
</div>
|
235
|
+
|
236
|
+
<div id="method-M000003" class="method-detail">
|
237
|
+
<a name="M000003"></a>
|
238
|
+
|
239
|
+
<div class="method-heading">
|
240
|
+
<a href="Pidify.src/M000003.html" target="Code" class="method-signature"
|
241
|
+
onclick="popupCode('Pidify.src/M000003.html');return false;">
|
242
|
+
<span class="method-name">pid_file</span><span class="method-args">()</span>
|
243
|
+
</a>
|
244
|
+
</div>
|
245
|
+
|
246
|
+
<div class="method-description">
|
247
|
+
<p>
|
248
|
+
Returns the PID filename as a Pathname.
|
249
|
+
</p>
|
250
|
+
</div>
|
251
|
+
</div>
|
252
|
+
|
253
|
+
<div id="method-M000004" class="method-detail">
|
254
|
+
<a name="M000004"></a>
|
255
|
+
|
256
|
+
<div class="method-heading">
|
257
|
+
<a href="Pidify.src/M000004.html" target="Code" class="method-signature"
|
258
|
+
onclick="popupCode('Pidify.src/M000004.html');return false;">
|
259
|
+
<span class="method-name">running?</span><span class="method-args">()</span>
|
260
|
+
</a>
|
261
|
+
</div>
|
262
|
+
|
263
|
+
<div class="method-description">
|
264
|
+
<p>
|
265
|
+
Returns true if the PID file exists for this script.
|
266
|
+
</p>
|
267
|
+
</div>
|
268
|
+
</div>
|
269
|
+
|
270
|
+
<div id="method-M000006" class="method-detail">
|
271
|
+
<a name="M000006"></a>
|
272
|
+
|
273
|
+
<div class="method-heading">
|
274
|
+
<a href="Pidify.src/M000006.html" target="Code" class="method-signature"
|
275
|
+
onclick="popupCode('Pidify.src/M000006.html');return false;">
|
276
|
+
<span class="method-name">save_pid</span><span class="method-args">()</span>
|
277
|
+
</a>
|
278
|
+
</div>
|
279
|
+
|
280
|
+
<div class="method-description">
|
281
|
+
<p>
|
282
|
+
Saves the PID of this script into the <a
|
283
|
+
href="Pidify.html#M000003">pid_file</a>. Automatically called by start.
|
284
|
+
</p>
|
285
|
+
</div>
|
286
|
+
</div>
|
287
|
+
|
288
|
+
<div id="method-M000008" class="method-detail">
|
289
|
+
<a name="M000008"></a>
|
290
|
+
|
291
|
+
<div class="method-heading">
|
292
|
+
<a href="Pidify.src/M000008.html" target="Code" class="method-signature"
|
293
|
+
onclick="popupCode('Pidify.src/M000008.html');return false;">
|
294
|
+
<span class="method-name">start</span><span class="method-args">()</span>
|
295
|
+
</a>
|
296
|
+
</div>
|
297
|
+
|
298
|
+
<div class="method-description">
|
299
|
+
<p>
|
300
|
+
Saves the PID of this script into the <a
|
301
|
+
href="Pidify.html#M000003">pid_file</a> by calling <a
|
302
|
+
href="Pidify.html#M000006">save_pid</a>. Raises an exception if running?
|
303
|
+
returns false.
|
304
|
+
</p>
|
305
|
+
</div>
|
306
|
+
</div>
|
307
|
+
|
308
|
+
<div id="method-M000009" class="method-detail">
|
309
|
+
<a name="M000009"></a>
|
310
|
+
|
311
|
+
<div class="method-heading">
|
312
|
+
<a href="Pidify.src/M000009.html" target="Code" class="method-signature"
|
313
|
+
onclick="popupCode('Pidify.src/M000009.html');return false;">
|
314
|
+
<span class="method-name">stop</span><span class="method-args">(signal='SIGINT')</span>
|
315
|
+
</a>
|
316
|
+
</div>
|
317
|
+
|
318
|
+
<div class="method-description">
|
319
|
+
<p>
|
320
|
+
Deletes the saved PID file and, if the PID belongs to a process different
|
321
|
+
from this script, sends a kill signal to the saved PID.
|
322
|
+
</p>
|
323
|
+
</div>
|
324
|
+
</div>
|
325
|
+
|
326
|
+
|
327
|
+
</div>
|
328
|
+
|
329
|
+
|
330
|
+
</div>
|
331
|
+
|
332
|
+
|
333
|
+
<div id="validator-badges">
|
334
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
335
|
+
</div>
|
336
|
+
|
337
|
+
</body>
|
338
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>pid_directory (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 71</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pid_directory</span>
|
15
|
+
<span class="ruby-ivar">@pid_directory</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>pid_directory= (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 79</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pid_directory=</span>(<span class="ruby-identifier">dir</span>)
|
15
|
+
<span class="ruby-ivar">@pid_directory</span> = <span class="ruby-constant">Pathname</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dir</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dir</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Pathname</span>
|
16
|
+
<span class="ruby-ivar">@pid_directory</span> = <span class="ruby-identifier">dir</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dir</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Pathname</span>
|
17
|
+
<span class="ruby-keyword kw">end</span></pre>
|
18
|
+
</body>
|
19
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>pid_file (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 85</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pid_file</span>
|
15
|
+
<span class="ruby-ivar">@pid_directory</span> <span class="ruby-operator">+</span> (<span class="ruby-constant">Pathname</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">$0</span>).<span class="ruby-identifier">basename</span>.<span class="ruby-identifier">to_s</span><span class="ruby-operator">+</span><span class="ruby-value str">'.pid'</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>running? (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 90</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">running?</span>
|
15
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-constant">FileTest</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">pid_file</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>pid (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 96</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pid</span>
|
15
|
+
<span class="ruby-identifier">dpid</span> = <span class="ruby-keyword kw">nil</span>
|
16
|
+
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">pid_file</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> <span class="ruby-identifier">dpid</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">chomp</span> }
|
17
|
+
<span class="ruby-identifier">dpid</span>.<span class="ruby-identifier">to_i</span>
|
18
|
+
<span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>save_pid (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 103</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save_pid</span>
|
15
|
+
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">pid_file</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> <span class="ruby-identifier">file</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">$$</span> }
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>delete_pid (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 111</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete_pid</span>
|
15
|
+
<span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">pid_file</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">FileTest</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">pid_file</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>start (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 117</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
|
15
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-value str">"Failed to start: already running (PID file exists)."</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">running?</span>
|
16
|
+
<span class="ruby-identifier">save_pid</span>
|
17
|
+
<span class="ruby-keyword kw">end</span></pre>
|
18
|
+
</body>
|
19
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>stop (Pidify)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File pidify.rb, line 124</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>(<span class="ruby-identifier">signal</span>=<span class="ruby-value str">'SIGINT'</span>)
|
15
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">running?</span>
|
16
|
+
<span class="ruby-keyword kw">begin</span>
|
17
|
+
<span class="ruby-identifier">pid</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pid</span>
|
18
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pid</span>
|
19
|
+
<span class="ruby-constant">Process</span>.<span class="ruby-identifier">kill</span>(<span class="ruby-identifier">signal</span>, <span class="ruby-identifier">pid</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pid</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">$$</span>
|
20
|
+
<span class="ruby-identifier">delete_pid</span>
|
21
|
+
<span class="ruby-keyword kw">else</span>
|
22
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-value str">"Failed to stop: no PID found."</span>
|
23
|
+
<span class="ruby-keyword kw">end</span>
|
24
|
+
<span class="ruby-keyword kw">rescue</span>
|
25
|
+
<span class="ruby-identifier">delete_pid</span>
|
26
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-value str">"Failed to stop: process already stopped; deleted PID file."</span>
|
27
|
+
<span class="ruby-keyword kw">end</span>
|
28
|
+
<span class="ruby-keyword kw">end</span>
|
29
|
+
<span class="ruby-keyword kw">end</span></pre>
|
30
|
+
</body>
|
31
|
+
</html>
|
data/doc/created.rid
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Mon Jan 09 11:53:33 EST 2006
|
@@ -0,0 +1,146 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
+
<head>
|
8
|
+
<title>File: pidify.rb</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
+
<link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
|
12
|
+
<script type="text/javascript">
|
13
|
+
// <![CDATA[
|
14
|
+
|
15
|
+
function popupCode( url ) {
|
16
|
+
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
+
}
|
18
|
+
|
19
|
+
function toggleCode( id ) {
|
20
|
+
if ( document.getElementById )
|
21
|
+
elem = document.getElementById( id );
|
22
|
+
else if ( document.all )
|
23
|
+
elem = eval( "document.all." + id );
|
24
|
+
else
|
25
|
+
return false;
|
26
|
+
|
27
|
+
elemStyle = elem.style;
|
28
|
+
|
29
|
+
if ( elemStyle.display != "block" ) {
|
30
|
+
elemStyle.display = "block"
|
31
|
+
} else {
|
32
|
+
elemStyle.display = "none"
|
33
|
+
}
|
34
|
+
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Make codeblocks hidden by default
|
39
|
+
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
+
|
41
|
+
// ]]>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
</head>
|
45
|
+
<body>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<div id="fileHeader">
|
50
|
+
<h1>pidify.rb</h1>
|
51
|
+
<table class="header-table">
|
52
|
+
<tr class="top-aligned-row">
|
53
|
+
<td><strong>Path:</strong></td>
|
54
|
+
<td>pidify.rb
|
55
|
+
</td>
|
56
|
+
</tr>
|
57
|
+
<tr class="top-aligned-row">
|
58
|
+
<td><strong>Last Update:</strong></td>
|
59
|
+
<td>Mon Jan 09 11:53:26 EST 2006</td>
|
60
|
+
</tr>
|
61
|
+
</table>
|
62
|
+
</div>
|
63
|
+
<!-- banner header -->
|
64
|
+
|
65
|
+
<div id="bodyContent">
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
<div id="contextContent">
|
70
|
+
|
71
|
+
<div id="description">
|
72
|
+
<h1><a href="../classes/Pidify.html">Pidify</a></h1>
|
73
|
+
<h2>Synopsis</h2>
|
74
|
+
<p>
|
75
|
+
A Ruby module to simplify storing and deleting the PID of a running
|
76
|
+
program. It also provides the ability to kill a running program whose PID
|
77
|
+
it has already saved. This allows a program to check if there is currently
|
78
|
+
another running instance of itself, and give it the ability to kill that
|
79
|
+
instance based on PID.
|
80
|
+
</p>
|
81
|
+
<p>
|
82
|
+
Note that this does no special process checking and relies solely on the
|
83
|
+
PID files it creates and maintains.
|
84
|
+
</p>
|
85
|
+
<p>
|
86
|
+
See <a href="../classes/Pidify.html">Pidify</a> for more information and
|
87
|
+
examples.
|
88
|
+
</p>
|
89
|
+
<h2>Requirements</h2>
|
90
|
+
<ul>
|
91
|
+
<li>Ruby 1.8
|
92
|
+
|
93
|
+
</li>
|
94
|
+
<li>Pathname module
|
95
|
+
|
96
|
+
</li>
|
97
|
+
</ul>
|
98
|
+
<h2>Author</h2>
|
99
|
+
<p>
|
100
|
+
Payton Swick, 2005
|
101
|
+
</p>
|
102
|
+
<h2>License</h2>
|
103
|
+
<p>
|
104
|
+
Creative Commons Attribution <a
|
105
|
+
href="http://creativecommons.org/licenses/by/2.0">creativecommons.org/licenses/by/2.0</a>/
|
106
|
+
</p>
|
107
|
+
|
108
|
+
</div>
|
109
|
+
|
110
|
+
<div id="requires-list">
|
111
|
+
<h3 class="section-bar">Required files</h3>
|
112
|
+
|
113
|
+
<div class="name-list">
|
114
|
+
pathname
|
115
|
+
</div>
|
116
|
+
</div>
|
117
|
+
|
118
|
+
</div>
|
119
|
+
|
120
|
+
|
121
|
+
</div>
|
122
|
+
|
123
|
+
|
124
|
+
<!-- if includes -->
|
125
|
+
|
126
|
+
<div id="section">
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
<!-- if method_list -->
|
136
|
+
|
137
|
+
|
138
|
+
</div>
|
139
|
+
|
140
|
+
|
141
|
+
<div id="validator-badges">
|
142
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
143
|
+
</div>
|
144
|
+
|
145
|
+
</body>
|
146
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Classes
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Classes</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Classes</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/Pidify.html">Pidify</a><br />
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</body>
|
27
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Files
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Files</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Files</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="files/pidify_rb.html">pidify.rb</a><br />
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</body>
|
27
|
+
</html>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Methods
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Methods</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Methods</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/Pidify.html#M000007">delete_pid (Pidify)</a><br />
|
24
|
+
<a href="classes/Pidify.html#M000005">pid (Pidify)</a><br />
|
25
|
+
<a href="classes/Pidify.html#M000001">pid_directory (Pidify)</a><br />
|
26
|
+
<a href="classes/Pidify.html#M000002">pid_directory= (Pidify)</a><br />
|
27
|
+
<a href="classes/Pidify.html#M000003">pid_file (Pidify)</a><br />
|
28
|
+
<a href="classes/Pidify.html#M000004">running? (Pidify)</a><br />
|
29
|
+
<a href="classes/Pidify.html#M000006">save_pid (Pidify)</a><br />
|
30
|
+
<a href="classes/Pidify.html#M000008">start (Pidify)</a><br />
|
31
|
+
<a href="classes/Pidify.html#M000009">stop (Pidify)</a><br />
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</body>
|
35
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
|
8
|
+
RDoc Documentation
|
9
|
+
|
10
|
+
-->
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
12
|
+
<head>
|
13
|
+
<title>RDoc Documentation</title>
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
15
|
+
</head>
|
16
|
+
<frameset rows="20%, 80%">
|
17
|
+
<frameset cols="25%,35%,45%">
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
21
|
+
</frameset>
|
22
|
+
<frame src="files/pidify_rb.html" name="docwin" />
|
23
|
+
</frameset>
|
24
|
+
</html>
|
data/doc/rdoc-style.css
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
|
2
|
+
body {
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
4
|
+
font-size: 90%;
|
5
|
+
margin: 0;
|
6
|
+
margin-left: 40px;
|
7
|
+
padding: 0;
|
8
|
+
background: white;
|
9
|
+
}
|
10
|
+
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
12
|
+
h1 { font-size: 150%; }
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
14
|
+
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
16
|
+
a:hover { background: #039; color: #eef; }
|
17
|
+
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
19
|
+
td > a {
|
20
|
+
background: transparent;
|
21
|
+
color: #039;
|
22
|
+
text-decoration: none;
|
23
|
+
}
|
24
|
+
|
25
|
+
/* and inside a section title */
|
26
|
+
.section-title > a {
|
27
|
+
background: transparent;
|
28
|
+
color: #eee;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
/* === Structural elements =================================== */
|
33
|
+
|
34
|
+
div#index {
|
35
|
+
margin: 0;
|
36
|
+
margin-left: -40px;
|
37
|
+
padding: 0;
|
38
|
+
font-size: 90%;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
div#index a {
|
43
|
+
margin-left: 0.7em;
|
44
|
+
}
|
45
|
+
|
46
|
+
div#index .section-bar {
|
47
|
+
margin-left: 0px;
|
48
|
+
padding-left: 0.7em;
|
49
|
+
background: #ccc;
|
50
|
+
font-size: small;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
div#classHeader, div#fileHeader {
|
55
|
+
width: auto;
|
56
|
+
color: white;
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
58
|
+
margin: 0;
|
59
|
+
margin-left: -40px;
|
60
|
+
border-bottom: 3px solid #006;
|
61
|
+
}
|
62
|
+
|
63
|
+
div#classHeader a, div#fileHeader a {
|
64
|
+
background: inherit;
|
65
|
+
color: white;
|
66
|
+
}
|
67
|
+
|
68
|
+
div#classHeader td, div#fileHeader td {
|
69
|
+
background: inherit;
|
70
|
+
color: white;
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
div#fileHeader {
|
75
|
+
background: #057;
|
76
|
+
}
|
77
|
+
|
78
|
+
div#classHeader {
|
79
|
+
background: #048;
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
.class-name-in-header {
|
84
|
+
font-size: 180%;
|
85
|
+
font-weight: bold;
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
div#bodyContent {
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
91
|
+
}
|
92
|
+
|
93
|
+
div#description {
|
94
|
+
padding: 0.5em 1.5em;
|
95
|
+
background: #efefef;
|
96
|
+
border: 1px dotted #999;
|
97
|
+
}
|
98
|
+
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
100
|
+
color: #125;;
|
101
|
+
background: transparent;
|
102
|
+
}
|
103
|
+
|
104
|
+
div#validator-badges {
|
105
|
+
text-align: center;
|
106
|
+
}
|
107
|
+
div#validator-badges img { border: 0; }
|
108
|
+
|
109
|
+
div#copyright {
|
110
|
+
color: #333;
|
111
|
+
background: #efefef;
|
112
|
+
font: 0.75em sans-serif;
|
113
|
+
margin-top: 5em;
|
114
|
+
margin-bottom: 0;
|
115
|
+
padding: 0.5em 2em;
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
/* === Classes =================================== */
|
120
|
+
|
121
|
+
table.header-table {
|
122
|
+
color: white;
|
123
|
+
font-size: small;
|
124
|
+
}
|
125
|
+
|
126
|
+
.type-note {
|
127
|
+
font-size: small;
|
128
|
+
color: #DEDEDE;
|
129
|
+
}
|
130
|
+
|
131
|
+
.xxsection-bar {
|
132
|
+
background: #eee;
|
133
|
+
color: #333;
|
134
|
+
padding: 3px;
|
135
|
+
}
|
136
|
+
|
137
|
+
.section-bar {
|
138
|
+
color: #333;
|
139
|
+
border-bottom: 1px solid #999;
|
140
|
+
margin-left: -20px;
|
141
|
+
}
|
142
|
+
|
143
|
+
|
144
|
+
.section-title {
|
145
|
+
background: #79a;
|
146
|
+
color: #eee;
|
147
|
+
padding: 3px;
|
148
|
+
margin-top: 2em;
|
149
|
+
margin-left: -30px;
|
150
|
+
border: 1px solid #999;
|
151
|
+
}
|
152
|
+
|
153
|
+
.top-aligned-row { vertical-align: top }
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
155
|
+
|
156
|
+
/* --- Context section classes ----------------------- */
|
157
|
+
|
158
|
+
.context-row { }
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
162
|
+
|
163
|
+
/* --- Method classes -------------------------- */
|
164
|
+
.method-detail {
|
165
|
+
background: #efefef;
|
166
|
+
padding: 0;
|
167
|
+
margin-top: 0.5em;
|
168
|
+
margin-bottom: 1em;
|
169
|
+
border: 1px dotted #ccc;
|
170
|
+
}
|
171
|
+
.method-heading {
|
172
|
+
color: black;
|
173
|
+
background: #ccc;
|
174
|
+
border-bottom: 1px solid #666;
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
176
|
+
}
|
177
|
+
.method-signature { color: black; background: inherit; }
|
178
|
+
.method-name { font-weight: bold; }
|
179
|
+
.method-args { font-style: italic; }
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
181
|
+
|
182
|
+
/* --- Source code sections -------------------- */
|
183
|
+
|
184
|
+
a.source-toggle { font-size: 90%; }
|
185
|
+
div.method-source-code {
|
186
|
+
background: #262626;
|
187
|
+
color: #ffdead;
|
188
|
+
margin: 1em;
|
189
|
+
padding: 0.5em;
|
190
|
+
border: 1px dashed #999;
|
191
|
+
overflow: hidden;
|
192
|
+
}
|
193
|
+
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
195
|
+
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
197
|
+
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
199
|
+
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
data/lib/pidify.rb
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
# = Pidify
|
2
|
+
#
|
3
|
+
# == Synopsis
|
4
|
+
#
|
5
|
+
# A Ruby module to simplify storing and deleting the PID of a running program.
|
6
|
+
# It also provides the ability to kill a running program whose PID it has
|
7
|
+
# already saved. This allows a program to check if there is currently another
|
8
|
+
# running instance of itself, and give it the ability to kill that instance
|
9
|
+
# based on PID.
|
10
|
+
#
|
11
|
+
# Note that this does no special process checking and relies solely on the PID
|
12
|
+
# files it creates and maintains.
|
13
|
+
#
|
14
|
+
# See Pidify for more information and examples.
|
15
|
+
#
|
16
|
+
# == Requirements
|
17
|
+
#
|
18
|
+
# - Ruby 1.8
|
19
|
+
# - Pathname module
|
20
|
+
#
|
21
|
+
# == Author
|
22
|
+
# Payton Swick, 2005
|
23
|
+
#
|
24
|
+
# == License
|
25
|
+
# Creative Commons Attribution
|
26
|
+
# http://creativecommons.org/licenses/by/2.0/
|
27
|
+
#
|
28
|
+
|
29
|
+
# Use the module methods in Pidify to save/delete the PID of a running script,
|
30
|
+
# or kill a running script using a saved PID.
|
31
|
+
#
|
32
|
+
# Example:
|
33
|
+
# require 'pidify'
|
34
|
+
# Pidify.running? # => false
|
35
|
+
# Pidify.start
|
36
|
+
# Pidify.running? # => true
|
37
|
+
# puts "I am running with PID #{Pidify.pid}!"
|
38
|
+
# Pidify.stop
|
39
|
+
# Pidify.running? # => false
|
40
|
+
#
|
41
|
+
# A more useful example:
|
42
|
+
# require 'pidify'
|
43
|
+
# require 'daemons'
|
44
|
+
# Signal.trap('INT') { Pidify.stop; exit }
|
45
|
+
# module Doer
|
46
|
+
# def self.start
|
47
|
+
# puts "starting"
|
48
|
+
# raise "Failed to start: already running." if Pidify.running?
|
49
|
+
# Daemons.daemonize
|
50
|
+
# Pidify.start
|
51
|
+
# loop do
|
52
|
+
# puts "hello world"
|
53
|
+
# sleep 1
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# if ARGV.include? 'stop'
|
58
|
+
# Pidify.stop
|
59
|
+
# puts "Daemon stopped."
|
60
|
+
# else
|
61
|
+
# puts "Daemon starting."
|
62
|
+
# Doer.start
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
module Pidify
|
66
|
+
require 'pathname'
|
67
|
+
@pid_directory = Pathname.new("/var/run")
|
68
|
+
@file_name = $0
|
69
|
+
|
70
|
+
class << self
|
71
|
+
# Returns the Pathname of the PID storage directory (defaults to /var/run).
|
72
|
+
def pid_directory
|
73
|
+
@pid_directory
|
74
|
+
end
|
75
|
+
|
76
|
+
# Sets the PID storage directory (defaults to /var/run). Be VERY CAREFUL
|
77
|
+
# using this, as delete_pid will try to delete whatever file it thinks is
|
78
|
+
# the pid_file for this script in the pid_directory. It's probably a good
|
79
|
+
# idea not to change this at all.
|
80
|
+
def pid_directory=(dir)
|
81
|
+
@pid_directory = Pathname.new(dir) unless dir.kind_of? Pathname
|
82
|
+
@pid_directory = dir if dir.kind_of? Pathname
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the PID filename as a Pathname.
|
86
|
+
def pid_file
|
87
|
+
@pid_directory + (Pathname.new(@file_name).basename.to_s+'.pid')
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns true if the pid_file exists for this script.
|
91
|
+
def pid_exists?
|
92
|
+
return FileTest.exists?(pid_file)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Returns true if the process using pid is running.
|
96
|
+
def running?
|
97
|
+
return false unless pid_exists?
|
98
|
+
begin
|
99
|
+
Process::kill 0, pid
|
100
|
+
true
|
101
|
+
rescue Errno::ESRCH
|
102
|
+
false
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns the PID stored in the pid_file (not necessarily the PID of this
|
107
|
+
# script). Returns nil if no PID exists or if there is a problem with the
|
108
|
+
# read.
|
109
|
+
def pid
|
110
|
+
return nil unless pid_exists?
|
111
|
+
dpid = nil
|
112
|
+
begin
|
113
|
+
File.open(pid_file, File::RDONLY) { |file| dpid = file.gets.chomp if file.flock(File::LOCK_SH|File::LOCK_NB); file.flock(File::LOCK_UN) }
|
114
|
+
rescue
|
115
|
+
return nil
|
116
|
+
end
|
117
|
+
return dpid.to_i if dpid && dpid.to_i > 0
|
118
|
+
nil
|
119
|
+
end
|
120
|
+
|
121
|
+
# Saves the PID of this script into the pid_file. Automatically called by
|
122
|
+
# start. Returns nil if the pid file already exists. Returns true if
|
123
|
+
# successful, false if there was a write problem.
|
124
|
+
def save_pid
|
125
|
+
return nil if pid_exists?
|
126
|
+
begin
|
127
|
+
File.open(pid_file, File::CREAT|File::EXCL|File::WRONLY) { |file| file.puts $$ if file.flock(File::LOCK_EX); file.flock(File::LOCK_UN) }
|
128
|
+
true
|
129
|
+
rescue
|
130
|
+
false
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# Deletes the PID file. Calling stop calls this automatically, but will
|
135
|
+
# also try to send a kill signal to the running process, if it is different
|
136
|
+
# from this one. BEWARE that this tries to delete whatever file is
|
137
|
+
# returned by pid_file and does no error checking on it! Returns true if
|
138
|
+
# the delete was successful, false if there was an error, and nil if the
|
139
|
+
# pid file doesn't exist.
|
140
|
+
def delete_pid
|
141
|
+
return nil unless pid_exists?
|
142
|
+
begin
|
143
|
+
# FIXME: lock first?
|
144
|
+
File.delete(pid_file)
|
145
|
+
true
|
146
|
+
rescue
|
147
|
+
false
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# Saves the PID of this script into the pid_file by calling save_pid.
|
152
|
+
# Raises an exception if pid_exists? returns false. Returns true if
|
153
|
+
# successful.
|
154
|
+
def start
|
155
|
+
raise "Failed to start: already running (PID file exists)." if pid_exists?
|
156
|
+
return true if save_pid
|
157
|
+
end
|
158
|
+
|
159
|
+
# Deletes the saved PID file and, if the PID belongs to a process different
|
160
|
+
# from this script, sends kill signals to the saved PID using pid_end.
|
161
|
+
# Returns true if the process was killed or false otherwise.
|
162
|
+
def stop(signals=%w(SIGTERM SIGQUIT SIGKILL), secs_between_signal=4)
|
163
|
+
return false unless pid_exists?
|
164
|
+
unless running?
|
165
|
+
delete_pid
|
166
|
+
return true
|
167
|
+
end
|
168
|
+
pid = self.pid
|
169
|
+
killed = true
|
170
|
+
killed = pid_end(signals, secs_between_signal) if pid != $$
|
171
|
+
delete_pid if killed == true
|
172
|
+
killed
|
173
|
+
end
|
174
|
+
|
175
|
+
# Sends each kill signal to the saved PID, pausing for secs_between_signal
|
176
|
+
# after each to check if it the process remains running. Stops when the
|
177
|
+
# process has ended or when all signals have been tried. Returns true if
|
178
|
+
# the process was killed or false otherwise.
|
179
|
+
def pid_end(signals=%w(SIGTERM SIGQUIT SIGKILL), secs_between_signal=4)
|
180
|
+
pid = self.pid
|
181
|
+
signals = [ signals ].flatten.map{|sig| sig.to_s}
|
182
|
+
existed = false
|
183
|
+
signals.each do |sig|
|
184
|
+
begin
|
185
|
+
Process.kill(sig, pid)
|
186
|
+
existed = true
|
187
|
+
rescue Errno::ESRCH
|
188
|
+
return (existed ? true : nil)
|
189
|
+
end
|
190
|
+
return true unless running?
|
191
|
+
sleep secs_between_signal
|
192
|
+
return true unless running?
|
193
|
+
end
|
194
|
+
not running?
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: pidify
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.2
|
7
|
+
date: 2006-11-06 00:00:00 -05:00
|
8
|
+
summary: This allows a script to check if there is currently another running instance of itself, and give it the ability to kill that instance based on PID.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: payton@foolord.com
|
12
|
+
homepage: http://foolord.com/
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: i686-linux
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Payton Swick
|
30
|
+
files:
|
31
|
+
- lib/pidify.rb
|
32
|
+
- doc/files
|
33
|
+
- doc/classes
|
34
|
+
- doc/fr_file_index.html
|
35
|
+
- doc/fr_method_index.html
|
36
|
+
- doc/rdoc-style.css
|
37
|
+
- doc/created.rid
|
38
|
+
- doc/index.html
|
39
|
+
- doc/fr_class_index.html
|
40
|
+
- doc/files/pidify_rb.html
|
41
|
+
- doc/classes/Pidify.src
|
42
|
+
- doc/classes/Pidify.html
|
43
|
+
- doc/classes/Pidify.src/M000001.html
|
44
|
+
- doc/classes/Pidify.src/M000002.html
|
45
|
+
- doc/classes/Pidify.src/M000003.html
|
46
|
+
- doc/classes/Pidify.src/M000004.html
|
47
|
+
- doc/classes/Pidify.src/M000005.html
|
48
|
+
- doc/classes/Pidify.src/M000006.html
|
49
|
+
- doc/classes/Pidify.src/M000007.html
|
50
|
+
- doc/classes/Pidify.src/M000008.html
|
51
|
+
- doc/classes/Pidify.src/M000009.html
|
52
|
+
test_files: []
|
53
|
+
|
54
|
+
rdoc_options: []
|
55
|
+
|
56
|
+
extra_rdoc_files: []
|
57
|
+
|
58
|
+
executables: []
|
59
|
+
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
dependencies: []
|
65
|
+
|