diff --git a/lib/test_process.dart b/lib/test_process.dart
index 1ad3279..3584ab5 100644
--- a/lib/test_process.dart
+++ b/lib/test_process.dart
@@ -54,10 +54,17 @@
   /// Whether [_log] has been passed to [printOnFailure] yet.
   bool _loggedOutput = false;
 
+  /// Returns a [Future] which completes to the exit code of the process, once
+  /// it completes.
+  Future<int> get exitCode => _process.exitCode;
+
+  /// The process ID of the process.
+  int get pid => _process.pid;
+
   /// Completes to [_process]'s exit code if it's exited, otherwise completes to
   /// `null` immediately.
   Future<int> get _exitCodeOrNull async =>
-      await _process.exitCode.timeout(Duration.ZERO, onTimeout: () => null);
+      await exitCode.timeout(Duration.ZERO, onTimeout: () => null);
 
   /// Starts a process.
   ///
@@ -153,7 +160,7 @@
     if (_loggedOutput) return;
     _loggedOutput = true;
 
-    var exitCode = await _exitCodeOrNull;
+    var exitCodeOrNull = await _exitCodeOrNull;
 
     // Wait a timer tick to ensure that all available lines have been flushed to
     // [_log].
@@ -161,10 +168,10 @@
 
     var buffer = new StringBuffer();
     buffer.write("Process `$description` ");
-    if ((await _exitCodeOrNull) == null) {
+    if (exitCodeOrNull == null) {
       buffer.writeln("was killed with SIGKILL in a tear-down. Output:");
     } else {
-      buffer.writeln("exited with exitCode $exitCode. Output:");
+      buffer.writeln("exited with exitCode $exitCodeOrNull. Output:");
     }
 
     buffer.writeln(_log.join("\n"));
@@ -210,7 +217,7 @@
   /// If this is called after the process is already dead, it does nothing.
   Future kill() async {
     _process.kill(ProcessSignal.SIGKILL);
-    await _process.exitCode;
+    await exitCode;
   }
 
   /// Waits for the process to exit, and verifies that the exit code matches
@@ -219,7 +226,7 @@
   /// If this is called after the process is already dead, it verifies its
   /// existing exit code.
   Future shouldExit([expectedExitCode]) async {
-    var exitCode = await _process.exitCode;
+    var exitCode = await this.exitCode;
     if (expectedExitCode == null) return;
     expect(exitCode, expectedExitCode,
         reason: "Process `$description` had an unexpected exit code.");
diff --git a/test/test_process_test.dart b/test/test_process_test.dart
index 8acf2a6..81d27e1 100644
--- a/test/test_process_test.dart
+++ b/test/test_process_test.dart
@@ -17,16 +17,19 @@
   group("shouldExit()", () {
     test("succeeds when the process exits with the given exit code", () async {
       var process = await startDartProcess('exitCode = 42;');
+      expect(process.exitCode, completion(equals(42)));
       await process.shouldExit(greaterThan(12));
     });
 
     test("fails when the process exits with a different exit code", () async {
       var process = await startDartProcess('exitCode = 1;');
+      expect(process.exitCode, completion(equals(1)));
       expect(process.shouldExit(greaterThan(12)), throwsTestFailure);
     });
 
     test("allows any exit code without an assertion", () async {
       var process = await startDartProcess('exitCode = 1;');
+      expect(process.exitCode, completion(equals(1)));
       await process.shouldExit();
     });
   });
