summaryrefslogtreecommitdiff
path: root/ipl/cfuncs/process.c
blob: ad241ffe5df791fbaefd7bc6950ce8c96027d8c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
############################################################################
#
#	File:     process.c
#
#	Subject:  Functions to manipulate UNIX processes
#
#	Author:   Gregg M. Townsend
#
#	Date:     November 17, 2004
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#  kill(pid, signal)	kill process (defaults: pid=0, signal=SIGTERM)
#  getpid()		return process ID
#  getuid()		return user ID
#  getgid()		return group ID
#
############################################################################
#
#  Requires:  UNIX, dynamic loading
#
############################################################################
*/

#include <signal.h>
#include <sys/types.h>
#include <unistd.h>

#include "icall.h"

int icon_kill (int argc, descriptor argv[])	/*: kill process */
   {
   int pid, sig;

   if (argc > 0)  {
      ArgInteger(1);
      pid = IntegerVal(argv[1]);
      }
   else
      pid = 0;

   if (argc > 1)  {
      ArgInteger(2);
      sig = IntegerVal(argv[2]);
      }
   else
      sig = SIGTERM;

   if (kill(pid, sig) == 0)
      RetNull();
   else
      Fail;
   }

int icon_getpid (int argc, descriptor argv[])	/*: query process ID */
   {
   RetInteger(getpid());
   }

int icon_getuid (int argc, descriptor argv[])	/*: query user ID */
   {
   RetInteger(getuid());
   }

int icon_getgid (int argc, descriptor argv[])	/*: query group ID */
   {
   RetInteger(getgid());
   }