CSC 357 Lecture Notes Weeks 6 and 7
Introduction to UNIX Processes and Process Control
starts a little utility that runs in the background to check periodically for arriving mail.xbiff &
hornet> xbiff & [1] 14583 hornet> rmiregistry & [2] 14590 hornet> jobs [1] Running xbiff [2] Running rmiregistry hornet> %2 rmiregistry ^C hornet> kill %1 hornet>
char *getenv(const char *name);
gcc -lm
int getrlimit(int resource, struct rlimit *rlp); int setrlimit(int resource, const struct rlimit *rlp);
| RLIMIT_AS | Max size in bytes of a process's total memory, as available |
| from the sbrk function. | |
| RLIMIT_CPU | Max amount of CPU time in seconds. |
| RLIMIT_FSIZE | Max size in bytes of a file that may be created. |
| RLIMIT_NOFILE | Max number of open files per process. |
| RLIMIT_NPROC | Max number of child processes per user ID. |
| RLIMIT_STACK | Max size in bytes of the stack. |
struct rlimit {
rlim_t rlim_cur; /* current (soft) limit */
rlim_t rlim_max; /* maximum (hard) limit value for rlim_cur */
};
pid_t getpid(); // get ID of current running process
pid_t getppid(); // get ID of parent process
uid_t getuid(); // get user ID of current process
pid_t fork();
int main() {
pid_t pid;
if ((pid = fork()) < 0) {
... /* fail */
}
else if (pid == 0) {
... /* child */
}
else {
... /* parent */
}
}
pid_t wait(int* status)
pid_t waitpid(pid_t pid, int* status, int options)
int execl(const char *path, const char *arg, ... /*, (char *)0 */);
int execlp(const char *file, const char *arg, ... /*, (char *)0 */);
int execle(const char *path, const char *arg, ... /*, (char *)0, char *const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvP(const char *file, const char *search_path, char *const argv[]);
int main() {
pid_t pid;
if ((pid = fork()) < 0) {
... /* fail */
}
else if (pid == 0) {
execvp(...) /* child */
}
else {
... /* parent */
}
}
chmod u+s prog
#! pathnameis considered by the kernel to be executable using the interpreter specified in pathname.
at the top of shell scripts intended to by executed using /bin/tcsh.#!/bin/tcsh