Many operating systems let a program return a result (separate from normal output) when its process terminates; these values are referred to as return codes, or more specifically exit statuses. The amount of information that can be passed this way is quite limited, in practice often restricted to signalling success or fail. From within the program this return is typically achieved by calling Exit (system call) (common even in C, where the alternative mechanism of returning from the main function is available).