Another tricky difference: signals Signal delivery semantics differ between Unix-like systems Mainly based on SysV vs. BSD heritage BSD-ish systems generally restart active syscalls when a signal is received SysV-ish systems let the syscall return EINTR There are also ambiguities over whether signal handlers are reinstated after they are run OpenSSH uses a technique from W. Richard Stevens to cope with this Write our own signal() replacement with consistent semantics