OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.io; | 5 part of dart.io; |
6 | 6 |
7 // TODO(ager): The only reason for this class is that we | 7 // TODO(ager): The only reason for this class is that we |
8 // cannot patch a top-level at this point. | 8 // cannot patch a top-level at this point. |
9 class _ProcessUtils { | 9 class _ProcessUtils { |
10 external static void _exit(int status); | 10 external static void _exit(int status); |
11 external static void _setExitCode(int status); | 11 external static void _setExitCode(int status); |
12 external static void _sleep(int millis); | 12 external static void _sleep(int millis); |
13 external static int _pid(Process process); | 13 external static int _pid(Process process); |
14 external static Stream<ProcessSignal> _watchSignal(ProcessSignal signal); | |
15 } | 14 } |
16 | 15 |
17 /** | 16 /** |
18 * Exit the Dart VM process immediately with the given exit code. | 17 * Exit the Dart VM process immediately with the given exit code. |
19 * | 18 * |
20 * This does not wait for any asynchronous operations to terminate. Using | 19 * This does not wait for any asynchronous operations to terminate. Using |
21 * [exit] is therefore very likely to lose data. | 20 * [exit] is therefore very likely to lose data. |
22 * | 21 * |
23 * The handling of exit codes is platform specific. | 22 * The handling of exit codes is platform specific. |
24 * | 23 * |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 */ | 303 */ |
305 int get pid; | 304 int get pid; |
306 } | 305 } |
307 | 306 |
308 | 307 |
309 /** | 308 /** |
310 * On Posix systems, [ProcessSignal] is used to send a specific signal | 309 * On Posix systems, [ProcessSignal] is used to send a specific signal |
311 * to a child process, see [:Process.kill:]. | 310 * to a child process, see [:Process.kill:]. |
312 */ | 311 */ |
313 class ProcessSignal { | 312 class ProcessSignal { |
314 static const ProcessSignal SIGHUP = const ProcessSignal._(1, "SIGHUP"); | 313 static const ProcessSignal SIGHUP = const ProcessSignal._signal(1); |
315 static const ProcessSignal SIGINT = const ProcessSignal._(2, "SIGINT"); | 314 static const ProcessSignal SIGINT = const ProcessSignal._signal(2); |
316 static const ProcessSignal SIGQUIT = const ProcessSignal._(3, "SIGQUIT"); | 315 static const ProcessSignal SIGQUIT = const ProcessSignal._signal(3); |
317 static const ProcessSignal SIGILL = const ProcessSignal._(4, "SIGILL"); | 316 static const ProcessSignal SIGILL = const ProcessSignal._signal(4); |
318 static const ProcessSignal SIGTRAP = const ProcessSignal._(5, "SIGTRAP"); | 317 static const ProcessSignal SIGTRAP = const ProcessSignal._signal(5); |
319 static const ProcessSignal SIGABRT = const ProcessSignal._(6, "SIGABRT"); | 318 static const ProcessSignal SIGABRT = const ProcessSignal._signal(6); |
320 static const ProcessSignal SIGBUS = const ProcessSignal._(7, "SIGBUS"); | 319 static const ProcessSignal SIGBUS = const ProcessSignal._signal(7); |
321 static const ProcessSignal SIGFPE = const ProcessSignal._(8, "SIGFPE"); | 320 static const ProcessSignal SIGFPE = const ProcessSignal._signal(8); |
322 static const ProcessSignal SIGKILL = const ProcessSignal._(9, "SIGKILL"); | 321 static const ProcessSignal SIGKILL = const ProcessSignal._signal(9); |
323 static const ProcessSignal SIGUSR1 = const ProcessSignal._(10, "SIGUSR1"); | 322 static const ProcessSignal SIGUSR1 = const ProcessSignal._signal(10); |
324 static const ProcessSignal SIGSEGV = const ProcessSignal._(11, "SIGSEGV"); | 323 static const ProcessSignal SIGSEGV = const ProcessSignal._signal(11); |
325 static const ProcessSignal SIGUSR2 = const ProcessSignal._(12, "SIGUSR2"); | 324 static const ProcessSignal SIGUSR2 = const ProcessSignal._signal(12); |
326 static const ProcessSignal SIGPIPE = const ProcessSignal._(13, "SIGPIPE"); | 325 static const ProcessSignal SIGPIPE = const ProcessSignal._signal(13); |
327 static const ProcessSignal SIGALRM = const ProcessSignal._(14, "SIGALRM"); | 326 static const ProcessSignal SIGALRM = const ProcessSignal._signal(14); |
328 static const ProcessSignal SIGTERM = const ProcessSignal._(15, "SIGTERM"); | 327 static const ProcessSignal SIGTERM = const ProcessSignal._signal(15); |
329 static const ProcessSignal SIGCHLD = const ProcessSignal._(17, "SIGCHLD"); | 328 static const ProcessSignal SIGCHLD = const ProcessSignal._signal(17); |
330 static const ProcessSignal SIGCONT = const ProcessSignal._(18, "SIGCONT"); | 329 static const ProcessSignal SIGCONT = const ProcessSignal._signal(18); |
331 static const ProcessSignal SIGSTOP = const ProcessSignal._(19, "SIGSTOP"); | 330 static const ProcessSignal SIGSTOP = const ProcessSignal._signal(19); |
332 static const ProcessSignal SIGTSTP = const ProcessSignal._(20, "SIGTSTP"); | 331 static const ProcessSignal SIGTSTP = const ProcessSignal._signal(20); |
333 static const ProcessSignal SIGTTIN = const ProcessSignal._(21, "SIGTTIN"); | 332 static const ProcessSignal SIGTTIN = const ProcessSignal._signal(21); |
334 static const ProcessSignal SIGTTOU = const ProcessSignal._(22, "SIGTTOU"); | 333 static const ProcessSignal SIGTTOU = const ProcessSignal._signal(22); |
335 static const ProcessSignal SIGURG = const ProcessSignal._(23, "SIGURG"); | 334 static const ProcessSignal SIGURG = const ProcessSignal._signal(23); |
336 static const ProcessSignal SIGXCPU = const ProcessSignal._(24, "SIGXCPU"); | 335 static const ProcessSignal SIGXCPU = const ProcessSignal._signal(24); |
337 static const ProcessSignal SIGXFSZ = const ProcessSignal._(25, "SIGXFSZ"); | 336 static const ProcessSignal SIGXFSZ = const ProcessSignal._signal(25); |
338 static const ProcessSignal SIGVTALRM = const ProcessSignal._(26, "SIGVTALRM"); | 337 static const ProcessSignal SIGVTALRM = const ProcessSignal._signal(26); |
339 static const ProcessSignal SIGPROF = const ProcessSignal._(27, "SIGPROF"); | 338 static const ProcessSignal SIGPROF = const ProcessSignal._signal(27); |
340 static const ProcessSignal SIGWINCH = const ProcessSignal._(28, "SIGWINCH"); | 339 static const ProcessSignal SIGPOLL = const ProcessSignal._signal(29); |
341 static const ProcessSignal SIGPOLL = const ProcessSignal._(29, "SIGPOLL"); | 340 static const ProcessSignal SIGSYS = const ProcessSignal._signal(31); |
342 static const ProcessSignal SIGSYS = const ProcessSignal._(31, "SIGSYS"); | |
343 | 341 |
| 342 const ProcessSignal._signal(int this._signalNumber); |
344 final int _signalNumber; | 343 final int _signalNumber; |
345 final String _name; | |
346 | |
347 const ProcessSignal._(this._signalNumber, this._name); | |
348 | |
349 String toString() => _name; | |
350 | |
351 Stream<ProcessSignal> watch() => _ProcessUtils._watchSignal(this); | |
352 } | 344 } |
353 | 345 |
354 | 346 |
355 class SignalException implements IOException { | |
356 final String message; | |
357 final osError; | |
358 | |
359 const SignalException(String this.message, [this.osError = null]); | |
360 | |
361 String toString() { | |
362 var msg = ""; | |
363 if (osError != null) { | |
364 msg = ", osError: $osError"; | |
365 } | |
366 return "SignalException: $message$msg"; | |
367 } | |
368 } | |
369 | |
370 | |
371 class ProcessException implements IOException { | 347 class ProcessException implements IOException { |
372 const ProcessException(String this.executable, | 348 const ProcessException(String this.executable, |
373 List<String> this.arguments, | 349 List<String> this.arguments, |
374 [String this.message = "", | 350 [String this.message = "", |
375 int this.errorCode = 0]); | 351 int this.errorCode = 0]); |
376 String toString() { | 352 String toString() { |
377 var msg = (message == null) ? 'OS error code: $errorCode' : message; | 353 var msg = (message == null) ? 'OS error code: $errorCode' : message; |
378 var args = arguments.join(' '); | 354 var args = arguments.join(' '); |
379 return "ProcessException: $msg\n Command: $executable $args"; | 355 return "ProcessException: $msg\n Command: $executable $args"; |
380 } | 356 } |
(...skipping 11 matching lines...) Expand all Loading... |
392 /** | 368 /** |
393 * Contains the system message for the process exception if any. | 369 * Contains the system message for the process exception if any. |
394 */ | 370 */ |
395 final String message; | 371 final String message; |
396 | 372 |
397 /** | 373 /** |
398 * Contains the OS error code for the process exception if any. | 374 * Contains the OS error code for the process exception if any. |
399 */ | 375 */ |
400 final int errorCode; | 376 final int errorCode; |
401 } | 377 } |
OLD | NEW |