Hm, I can see where this would make matching difficult, but I don't think that an `int` is the right way to go here. I know that uv will give us different error codes on different platforms, and using an integer leaves out any useful string description of the error.

All previous handling of an `IoError` instance has been to propagate up to the `rt::io` layer which will then raise a condition. I don't think that it's quite proper to raise a condition in this case (the condition *should* have been raised at spawn-time), so I still think that this should be an `IoError` instance. To accomodate this I think that the best option is to change the signature of the wait function on `io::Process` to

```rust
fn wait<'a>(&'a mut self) -> &'a ProcessExit
```

And then explicitly mention in the documentation why it's a borrowed pointer. I think that you provide enough convenience methods on the `ProcessExit` type that the usage won't be painful at all. Then to accomodate `run::process_status` I think that you can just implement `Clone` (or derive it) on `ProcessExit` and clone the return value from the process.