pidify 0.1.2-i686-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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? # =&gt; false
86
+ Pidify.start
87
+ Pidify.running? # =&gt; true
88
+ puts &quot;I am running with PID #{Pidify.pid}!&quot;
89
+ Pidify.stop
90
+ Pidify.running? # =&gt; 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 &quot;starting&quot;
102
+ raise &quot;Failed to start: already running (PID file exists).&quot; if Pidify.running?
103
+ Daemons.daemonize
104
+ Pidify.start
105
+ loop do
106
+ puts &quot;hello world&quot;
107
+ sleep 1
108
+ end
109
+ end
110
+ end
111
+ if ARGV.include? 'stop'
112
+ Pidify.stop
113
+ puts &quot;Daemon stopped.&quot;
114
+ else
115
+ puts &quot;Daemon starting.&quot;
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>&nbsp;&nbsp;
130
+ <a href="#M000005">pid</a>&nbsp;&nbsp;
131
+ <a href="#M000001">pid_directory</a>&nbsp;&nbsp;
132
+ <a href="#M000002">pid_directory=</a>&nbsp;&nbsp;
133
+ <a href="#M000003">pid_file</a>&nbsp;&nbsp;
134
+ <a href="#M000004">running?</a>&nbsp;&nbsp;
135
+ <a href="#M000006">save_pid</a>&nbsp;&nbsp;
136
+ <a href="#M000008">start</a>&nbsp;&nbsp;
137
+ <a href="#M000009">stop</a>&nbsp;&nbsp;
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&#8217;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">&quot;Failed to start: already running (PID file exists).&quot;</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">&quot;Failed to stop: no PID found.&quot;</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">&quot;Failed to stop: process already stopped; deleted PID file.&quot;</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&nbsp;&nbsp;
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>
@@ -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
+