SO305 - Process Management and Process Scheduling

A process is a binary file that is loaded into memory and executed. Everything you do in Solaris generates a process. A process is accompagnied by an environnment which, amongst other data, contains the following information:

  • A unique process ID (PID),
  • The unique ID of the parent process (PPID),
  • The unique user ID of the user who generated the process (UID),
  • The unique group ID of the group to which the process is attached (GID),
  • The processing time,
  • The process priority,
  • The current working directory,
  • The list of open files.

Process environnement data is stored in the /proc directory.

The /proc File System

The /proc directory contains virtual files and directories. File content is created dynamically when consulted and only root can view all the data within /proc.

Start by taking a look at all the directories containing digits:

root@solaris:~# cd /proc; ls -d [0-9]*
0     1015  1119  118   1664  191   235   3609  3644  3653  3668  3685  3722  3742  42    5770  5893  6123  6180  6236  679   85    895   936   979
1     1016  1122  13    1665  1992  237   3620  3645  3655  3674  3688  3723  3743  4985  5774  5906  6136  6181  6242  7     874   896   941   982
1002  104   1129  1406  1666  2     241   3633  3647  3657  3675  3698  3725  3782  5     5804  5960  6165  6199  6255  8     881   898   943   985
1012  11    1138  1456  1667  203   3     3636  3648  3658  3679  3700  3738  3784  50    5834  5968  6173  6201  6274  814   890   899   95    996
1013  1106  1143  1495  1668  2122  3579  3640  3650  3660  3682  3709  3739  3786  5614  5843  6     6174  6216  637   818   891   932   957
1014  1109  1159  1661  1822  225   3608  3643  3652  3661  3683  3720  3741  413   570   5889  6090  6178  6227  6736  823   892   934   978

Each of the above directories refers to a PID and contains all the necessary process environnement information.

Process Types

There are three types of processes

  • interactive - a process launched in a terminal either in the foreground or the background,
  • batch - a process launched by the system at a specific time,
  • daemon - a process that has no parent terminal.

A process can be in one of 9 process states:

Process State Description
New The process' initial state when launched
User Mode The process executes in user mode
Kernel Mode The process executes in kernel mode
New The process' initial state when launched
waiting The process is waiting for a resource other than the processor
sleeping The process is sleeping
runnable The process has everything it needs to run except the processor
swap The process is sleeping in swap
elected The process has control of the processor

Managing Processes

The ps Command

The output of the ps caommand shows those processes generated by the user attached to the terminal:

root@solaris:~# ps
  PID TTY         TIME CMD
 6771 pts/1       0:00 ps
 3742 pts/1       0:00 su
 3743 pts/1       0:00 bash

Used with the -f switch, the command shows the Process Table:

root@solaris:~# ps -f
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root  6772  3743   0 15:03:08 pts/1       0:00 ps -f
    root  3742  3741   0   Dec 15 pts/1       0:00 su -
    root  3743  3742   0   Dec 15 pts/1       0:00 -bash

The column headers in the above output are defined as follows:

UID User ID
PID Process Indentification
PPID Parent Process ID
C Priority
STIME Start Time
TTY Terminal
TIME Duration
CMD Command

To see all the running processes, add the -e switch:

root@solaris:~# ps -ef
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root     0     0   0   Dec 15 ?           0:04 sched
    root     5     0   0   Dec 15 ?           0:27 zpool-rpool
    root     6     0   0   Dec 15 ?           0:02 kmem_task
    root     1     0   0   Dec 15 ?           0:00 /usr/sbin/init
    root     2     0   0   Dec 15 ?           0:00 pageout
    root     3     0   0   Dec 15 ?           0:13 fsflush
    root     7     0   0   Dec 15 ?           0:00 intrd
    root     8     0   0   Dec 15 ?           0:00 vmtasks
    root   874     1   0   Dec 15 ?           0:00 /usr/sbin/cron
    root    11     1   0   Dec 15 ?           0:03 /lib/svc/bin/svc.startd
    root    13     1   0   Dec 15 ?           0:13 /lib/svc/bin/svc.configd
    root   203     1   0   Dec 15 ?           0:00 /usr/lib/zones/zonestatd
 pkg5srv  1667  1661   0   Dec 15 ?           0:00 /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
    root   118     1   0   Dec 15 ?           0:00 /usr/lib/pfexecd
 pkg5srv  1495     1   0   Dec 15 ?           0:07 /usr/apache2/2.2/bin/htcacheclean -d20160 -i -l 2048M -n -p /var/cache/pkg/sysr
  netcfg    42     1   0   Dec 15 ?           0:00 /lib/inet/netcfgd
    root   679     1   0   Dec 15 ?           0:00 /usr/lib/picl/picld
    root  1106     1   0   Dec 15 ?           0:00 /usr/lib/devchassis/devchassisd
 trainee  3650     1   0   Dec 15 ?           0:00 /usr/lib/bonobo-activation-server --ac-activate --ior-output-fd=21
   dladm    50     1   0   Dec 15 ?           0:00 /usr/sbin/dlmgmtd
  daemon    85     1   0   Dec 15 ?           0:00 /lib/crypto/kcfd
    root   104     1   0   Dec 15 ?           0:00 /lib/inet/in.mpathd
  netadm    95     1   0   Dec 15 ?           0:00 /lib/inet/ipmgmtd
  daemon   881     1   0   Dec 15 ?           0:00 /usr/sbin/rpcbind
    root   637     1   0   Dec 15 ?           0:00 /sbin/dhcpagent
    root   818     0   0   Dec 15 ?           0:00 zpool-mypool
    root   957     1   0   Dec 15 ?           0:00 /usr/sbin/syslogd
    root   934     1   0   Dec 15 ?           2:09 /usr/lib/fm/fmd/fmd
    root   898     1   0   Dec 15 ?           0:00 /usr/lib/autofs/automountd
 trainee  3648  3579   0   Dec 15 ?           0:01 nautilus
    root   932     1   0   Dec 15 ?           0:02 /usr/bin/VBoxService
    root   237     1   0   Dec 15 ?           0:00 /usr/lib/rad/rad -sp
    root   225     1   0   Dec 15 ?           0:00 /usr/lib/sysevent/syseventd
    root   814     1   0   Dec 15 ?           0:03 /usr/sbin/nscd
    root   235     1   0   Dec 15 ?           0:00 /usr/sbin/vbiosd
 trainee  3644  3579   0   Dec 15 ?           0:05 metacity
 pkg5srv  1666  1661   0   Dec 15 ?           0:00 /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
    root   413     1   0   Dec 15 ?           0:01 /usr/lib/devfsadm/devfsadmd
 trainee  3658  3579   0   Dec 15 ?           0:01 /usr/bin/python2.6 /usr/lib/updatemanagernotifier
    root   823     1   0   Dec 15 ?           0:00 /lib/svc/method/iscsid
    root   191     1   0   Dec 15 ?           0:00 /usr/lib/utmpd
    root   996   895   0   Dec 15 ?           0:00 /usr/lib/hal/hald-addon-storage
    root   241     1   0   Dec 15 ?           0:00 /usr/lib/dbus-daemon --system
  netadm   570     1   0   Dec 15 ?           0:00 /lib/inet/nwamd
    root   892     1   0   Dec 15 ?           0:01 /usr/lib/hal/hald --daemon=yes
noaccess  1129     1   0   Dec 15 ?           0:00 /usr/lib/fm/notify/asr-notify
 pkg5srv  1668  1661   0   Dec 15 ?           0:00 /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
    root   936     1   0   Dec 15 ?           0:00 /usr/lib/ssh/sshd
    root  1122     1   0   Dec 15 ?           0:00 /usr/sbin/gdm-binary
    root   941   895   0   Dec 15 ?           0:00 /usr/lib/hal/hald-addon-cpufreq
  daemon   890     1   0   Dec 15 ?           0:00 /usr/lib/nfs/nfsmapid
    root   891     1   0   Dec 15 ?           0:00 /usr/lib/inet/inetd start
    root   899   898   0   Dec 15 ?           0:00 /usr/lib/autofs/automountd
    root   895   892   0   Dec 15 ?           0:00 hald-runner
    root   896     1   0   Dec 15 ?           0:00 /usr/sbin/console-kit-daemon
    root   943   895   0   Dec 15 ?           0:01 /usr/lib/hal/hald-addon-acpi
    root   985    11   0   Dec 15 console     0:00 /usr/sbin/ttymon -g -d /dev/console -l console -T sun-color -m ldterm,ttcompat 
    root   979     1   0   Dec 15 ?           0:00 /usr/sbin/auditd
    root   982     1   0   Dec 15 ?           0:00 /usr/lib/sendmail -bl -q15m
   smmsp   978     1   0   Dec 15 ?           0:00 /usr/lib/sendmail -Ac -q15m
 trainee  1159  1143   1   Dec 15 vt/7        1:59 /usr/bin/Xorg :0 -nolisten tcp -br -novtswitch -auth /tmp/gdm-auth-cookies-DOaq
    root  6255     1   0   Dec 15 ?           0:00 /usr/lib/inet/in.ndpd
    root  1002     1   0   Dec 15 vt/1        0:00 /usr/lib/vtdaemon -c 16
  daemon  6181     1   0   Dec 15 ?           0:00 /usr/lib/nfs/nfsmapid
    root  1012    11   0   Dec 15 vt/4        0:00 /usr/sbin/ttymon -g -d /dev/vt/4 -l console -m ldterm,ttcompat -h -p solaris.fe
    root  1013    11   0   Dec 15 vt/2        0:00 /usr/sbin/ttymon -g -d /dev/vt/2 -l console -m ldterm,ttcompat -h -p solaris.fe
    root  1014    11   0   Dec 15 vt/6        0:00 /usr/sbin/ttymon -g -d /dev/vt/6 -l console -m ldterm,ttcompat -h -p solaris.fe
    root  1015    11   0   Dec 15 vt/5        0:00 /usr/sbin/ttymon -g -d /dev/vt/5 -l console -m ldterm,ttcompat -h -p solaris.fe
    root  1016    11   0   Dec 15 vt/3        0:00 /usr/sbin/ttymon -g -d /dev/vt/3 -l console -m ldterm,ttcompat -h -p solaris.fe
noaccess  1138     1   0   Dec 15 ?           0:00 /usr/lib/fm/notify/smtp-notify
    root  1119     1   0   Dec 15 ?           0:00 /usr/lib/rmvolmgr -s
    root  4985     1   0   Dec 15 ?           0:00 zsched
    root  1406     1   0   Dec 15 ?           0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf
    root  6201  5770   0   Dec 15 zoneconsole    0:00 /usr/sbin/ttymon -g -d /dev/console -l console -T vt100 -m ldterm,ttcompat -h -
    root  1109     1   0   Dec 15 ?           0:00 /usr/lib/inet/in.ndpd
    root  1143  1122   0   Dec 15 ?           0:00 /usr/lib/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
     gdm  1456     1   0   Dec 15 ?           0:00 /usr/bin/dbus-launch --exit-with-session
 trainee  3645  3579   0   Dec 15 ?           0:02 gnome-panel
 trainee  3652     1   0   Dec 15 ?           0:05 /usr/lib/wnck-applet --oaf-activate-iid=OAFIID:GNOME_Wncklet_Factory --oaf-ior-
 trainee  3653  3579   0   Dec 15 ?           0:00 /usr/lib/nwam-manager
  netadm  5893     1   0   Dec 15 ?           0:00 /lib/inet/ipmgmtd
    root  2122     1   0   Dec 15 ?           0:00 /usr/lib/ocm/ccr/bin/nmz
 trainee  3609     1   0   Dec 15 ?           0:00 /usr/lib/dbus-daemon --fork --print-pid 6 --print-address 8 --session
    root  6773  3743   0 15:04:31 pts/1       0:00 ps -ef
 pkg5srv  1665  1661   0   Dec 15 ?           0:00 /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
 trainee  3579  1992   0   Dec 15 ?           0:00 gnome-session
 trainee  3643     1   0   Dec 15 ?           0:00 /usr/lib/gvfsd
 trainee  3620  3579   0   Dec 15 ?           0:00 /usr/bin/ssh-agent -- gnome-session
 trainee  3633     1   0   Dec 15 ?           0:02 /usr/lib/gconfd-2
 trainee  3647     1   0   Dec 15 ?           0:00 /usr/lib/gvfs-hal-volume-monitor
    root  1664     1   0   Dec 15 ?           0:00 /usr/lib/zones/zoneproxyd
 trainee  3608     1   0   Dec 15 ?           0:00 dbus-launch --exit-with-session --sh-syntax
    root  1661     1   0   Dec 15 ?           0:00 /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
    root  1822     1   0   Dec 15 ?           0:00 zoneadmd -z myzone
  netadm  5960     1   0   Dec 15 ?           0:07 /lib/inet/nwamd
 trainee  3636     1   0   Dec 15 ?           0:00 /usr/bin/gnome-keyring-daemon --start --components=pkcs11
 trainee  3640     1   0   Dec 15 ?           0:03 /usr/lib/gnome-settings-daemon
    root  1992  1143   0   Dec 15 ?           0:00 /usr/lib/gdm-session-worker
 trainee  3657     1   0   Dec 15 ?           0:00 /usr/lib/gvfsd-trash --spawner :1.9 /org/gtk/gvfs/exec_spaw/0
    root  6136     1   0   Dec 15 ?           0:04 /usr/sbin/nscd
    root  6090     1   0   Dec 15 ?           0:00 /usr/lib/zones/zoneproxy-client -s localhost:1008
    root  6216     1   0   Dec 15 ?           0:01 /usr/sbin/syslogd
    root  6173     1   0   Dec 15 ?           0:00 /usr/lib/autofs/automountd
    root  6123     1   0   Dec 15 ?           0:00 /usr/sbin/cron
    root  6178     1   0   Dec 15 ?           0:00 /usr/lib/inet/inetd start
 trainee  6274     1   2   Dec 15 ?           1:40 gedit
    root  6199     1   0   Dec 15 ?           0:00 /usr/lib/ssh/sshd
  daemon  5834     1   0   Dec 15 ?           0:00 /lib/crypto/kcfd
    root  5968     1   0   Dec 15 ?           0:00 /sbin/dhcpagent
    root  5614  4985   0   Dec 15 ?           0:00 /usr/sbin/init
 trainee  3655     1   0   Dec 15 ?           0:00 /usr/lib/trashapplet --oaf-activate-iid=OAFIID:GNOME_Panel_TrashApplet_Factory 
    root  5906     1   0   Dec 15 ?           0:00 /lib/inet/in.mpathd
    root  5843     1   0   Dec 15 ?           0:00 /usr/lib/pfexecd
 trainee  6736     1   0   Dec 15 ?           0:01 nautilus --no-desktop /home/trainee
    root  6174  6173   0   Dec 15 ?           0:00 /usr/lib/autofs/automountd
    root  6180     1   0   Dec 15 ?           0:00 /usr/lib/fm/fmd/fmd
    root  5889     1   0   Dec 15 ?           0:00 /usr/lib/utmpd
    root  5770     1   0   Dec 15 ?           0:01 /lib/svc/bin/svc.startd
 trainee  3660  3579   0   Dec 15 ?           0:00 python2.6 /usr/lib/system-config-printer/applet.py
 trainee  3722     1   0   Dec 15 ?           0:00 /usr/lib/notification-daemon
 trainee  3679     1   0   Dec 15 ?           0:00 /usr/bin/VBoxClient --display
  daemon  6165     1   0   Dec 15 ?           0:00 /usr/sbin/rpcbind
  netcfg  5804     1   0   Dec 15 ?           0:00 /lib/inet/netcfgd
 trainee  3661  3579   0   Dec 15 ?           1:12 java -Djava.security.policy=/usr/share/vpanels/java.policy com.oracle.solaris.v
 trainee  3739  3738   0   Dec 15 ?           0:00 gnome-pty-helper
 trainee  3675     1   0   Dec 15 ?           0:00 /usr/bin/VBoxClient --clipboard
 trainee  3700     1   0   Dec 15 ?           0:00 /usr/lib/notification-area-applet --oaf-activate-iid=OAFIID:GNOME_NotificationA
 trainee  3674  3579   0   Dec 15 ?           0:03 /usr/bin/xscreensaver -nosplash
 trainee  3683     1   0   Dec 15 ?           0:26 /usr/bin/VBoxClient --draganddrop
 trainee  3668  3579   0   Dec 15 ?           0:01 gnome-power-manager
 trainee  3685  3579   0   Dec 15 ?           0:00 gnome-volume-control-applet
 trainee  3682     1   0   Dec 15 ?           0:00 /usr/bin/VBoxClient --seamless
 trainee  3698     1   0   Dec 15 ?           0:01 /usr/lib/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf
 trainee  3688  3579   0   Dec 15 ?           0:01 python2.6 /usr/lib/time-slider-notify
 trainee  3720     1   0   Dec 15 ?           0:00 /usr/lib/gvfsd-metadata
 trainee  3738     1   0   Dec 15 ?           0:05 gnome-terminal
 trainee  3723   237   0   Dec 15 ?           0:00 /usr/lib/rad/rad -m /usr/lib/rad/transport -m /usr/lib/rad/protocol -m /usr/lib
 trainee  3709     1   0   Dec 15 ?           0:00 /usr/bin/pulseaudio --start
 trainee  3725     1   1   Dec 15 ?          11:40 /usr/bin/firefox
    root  3742  3741   0   Dec 15 pts/1       0:00 su -
 trainee  3741  3738   0   Dec 15 pts/1       0:00 bash
    root  3743  3742   0   Dec 15 pts/1       0:00 -bash
    root  5774     1   0   Dec 15 ?           0:07 /lib/svc/bin/svc.configd
 trainee  3784     1   0   Dec 15 ?           0:02 evince file:///tmp/Solaris_Zones_Tutorial.pdf
 trainee  3782     1   0   Dec 15 ?           0:00 /usr/lib/gam_server
 trainee  3786     1   0   Dec 15 ?           0:00 /usr/lib/evinced
   smmsp  6227     1   0   Dec 15 ?           0:00 /usr/lib/sendmail -Ac -q15m
    root  6236     1   0   Dec 15 ?           0:00 /usr/lib/sendmail -bl -q15m
    root  6242     1   0   Dec 15 ?           0:00 /usr/lib/fm/notify/smtp-notify

The top Command

The ps command, although useful, only gives a snapshot view of the processes running at the time the command was executed. To get a continual view of what is running you can use the top command:

last pid:  6807;  load avg:  0.21,  0.19,  0.17;  up 2+08:33:55                                                                                                15:59:00
141 processes: 140 sleeping, 1 on cpu
CPU states: 93.2% idle,  4.1% user,  2.7% kernel,  0.0% iowait,  0.0% swap
Kernel: 1111 ctxsw, 15 trap, 879 intr, 3744 syscall, 4 flt
Memory: 2048M phys mem, 74M free mem, 1024M total swap, 1024M free swap

   PID USERNAME NLWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
   934 root       28  59    0   38M 6224K sleep    4:42  2.30% fmd
  3738 trainee     2  54    0  129M   18M sleep    0:07  0.87% gnome-terminal
  3725 trainee    19  49    0  533M  216M sleep   12:58  0.82% firefox
  1159 trainee     3  59    0  170M  152M sleep    2:10  0.45% Xorg
  3661 trainee    23  59    0  235M  116M sleep    1:25  0.24% java
  3683 trainee     3  59    0   13M  724K sleep    0:31  0.10% VBoxClient
  6806 root        1  59    0 4432K 2848K cpu/1    0:00  0.08% top
  5960 netadm      7  59    0 5344K 3504K sleep    0:08  0.03% nwamd
  3644 trainee     1  59    0   31M   13M sleep    0:05  0.02% metacity
  3698 trainee     1  59    0   32M 8904K sleep    0:00  0.02% clock-applet
    13 root       18  59    0   23M   13M sleep    0:13  0.02% svc.configd
  3640 trainee     1  59    0  143M   21M sleep    0:03  0.01% gnome-settings-
  6136 root       27  59    0 5808K 3084K sleep    0:04  0.01% nscd
   932 root        7  59    0   11M  600K sleep    0:02  0.01% VBoxService
  6216 root       11  59    0 3964K 1080K sleep    0:01  0.01% syslogd
  3688 trainee     1  59    0  133M   13M sleep    0:01  0.00% isapython2.6
  3658 trainee     1  12   19   61M   25M sleep    0:01  0.00% updatemanagerno
   104 root        1  59    0 9692K  388K sleep    0:00  0.00% in.mpathd
  1495 pkg5srv     1  59    0 5272K 1240K sleep    0:07  0.00% htcacheclean
  3674 trainee     1  59    0   14M 2892K sleep    0:03  0.00% xscreensaver
  1665 pkg5srv    24  59    0   21M  240K sleep    0:00  0.00% httpd.worker
   982 root        1  59    0 6224K 1216K sleep    0:00  0.00% sendmail
  3668 trainee     1  59    0  128M 9484K sleep    0:00  0.00% gnome-power-man
  1661 root        1  59    0   14M  204K sleep    0:00  0.00% httpd.worker
  6236 root        1  59    0 6164K 1900K sleep    0:00  0.00% sendmail
  3653 trainee     2  59    0  128M 9724K sleep    0:00  0.00% nwam-manager
  5968 root        1  59    0 2592K 1232K sleep    0:00  0.00% dhcpagent
  1138 noaccess    4  59    0   10M 1736K sleep    0:00  0.00% smtp-notify
   637 root        1  59    0 9408K  484K sleep    0:00  0.00% dhcpagent

The default refresh interval is 3 seconds. To make it 1 second, use top's s command:

last pid:  6807;  load avg:  0.17,  0.18,  0.17;  up 2+08:38:55                                                                                                16:04:00
141 processes: 138 sleeping, 2 running, 1 on cpu
CPU states: 95.1% idle,  2.9% user,  2.0% kernel,  0.0% iowait,  0.0% swap
Kernel: 1084 ctxsw, 10 trap, 894 intr, 4709 syscall, 5 flt
Memory: 2048M phys mem, 69M free mem, 1024M total swap, 1024M free swap
Seconds to delay: 1
   PID USERNAME NLWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
  3725 trainee    19  49    0  533M  216M sleep   13:05  1.05% firefox
  6274 trainee     1  49    0  141M   28M sleep    2:04  0.80% gedit
  1159 trainee     3  59    0  170M  152M sleep    2:11  0.71% Xorg
  3652 trainee     1  59    0  129M   13M sleep    0:05  0.26% wnck-applet
  3661 trainee    23  59    0  235M  116M run      1:26  0.23% java
  3738 trainee     2  59    0  129M   18M sleep    0:08  0.21% gnome-terminal
  3683 trainee     3  59    0   13M  724K run      0:31  0.09% VBoxClient
...

Use the M key to sort the processes in descending order of memery usage:

last pid:  8942;  load avg:  0.12,  0.15,  0.11;  up 3+05:39:51                                                                                                13:04:56
145 processes: 143 sleeping, 1 zombie, 1 on cpu
CPU states: 89.4% idle,  6.6% user,  4.0% kernel,  0.0% iowait,  0.0% swap
Kernel: 1037 ctxsw, 5616 trap, 828 intr, 6520 syscall, 5 fork, 3960 flt
Memory: 2048M phys mem, 197M free mem, 1024M total swap, 1024M free swap

   PID USERNAME NLWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
  3725 trainee    22  49    0  519M  168M sleep   25:28  0.45% firefox
  3661 trainee    23  59    0  227M  149M sleep    2:58  0.18% java
  3685 trainee     1  59    0  191M 8008K sleep    0:00  0.00% gnome-volume-co
  1159 trainee     3  59    0  169M  151M sleep    3:59  0.30% Xorg
  3645 trainee     2  59    0  150M   35M sleep    0:05  0.00% gnome-panel
  3648 trainee     1  49    0  147M   28M sleep    0:01  0.00% nautilus
  3640 trainee     1  59    0  143M   22M sleep    0:06  0.00% gnome-settings-
...

The fg and bg Commands

You can launch a process either in the foreground or the background when using bash or ksh. A process running in the background is asynchonous whilst a process in the foreground is synchronous.

Execute the following command:

root@solaris:~# sleep 9999 &
[1] 6790

In the above output you can see a job number between square brackets followed by the PID. The job number is specific to the terminal in which the cammand is executed.

At any point in time, you can display a list of running jobs by using the jobs command:

root@solaris:~# jobs -l
[1]+  6790 Running                 sleep 9999 &

Note the + sign between the job number and PID. This indicates that the job is the last job to have been worked on. A - sign indicates that the job was the second to last job thta was worked on.

If you are running a job in the foreground and you wish to swap it to the background, you first need to pause the process. Pausing a process in Solaris 11 is acheived using ^Z as shown by the output of the follwing command:

root@solaris:~# stty -a
speed 38400 baud; 
rows = 36; columns = 168; ypixels = 0; xpixels = 0;
csdata ?
eucw 1:0:0:0, scrw 1:0:0:0
intr = ^c; quit = ^\; erase = ^?; kill = ^u;
eof = ^d; eol = -^?; eol2 = -^?; swtch = <undef>;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;
-parenb -parodd cs8 -cstopb hupcl cread -clocal -loblk -crtscts -crtsxoff -parext 
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc 
ixon ixany -ixoff imaxbel 
isig icanon -xcase echo echoe echok -echonl -noflsh 
-tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten 
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel 

To understand how ths works, execute the following command:

root@solaris:~# sleep 1234

Now pause the process with ^Z :

root@solaris:~# sleep 1234
^Z
[2]+  Stopped                 sleep 1234
root@solaris:~# jobs -l
[1]-  6790 Running                 sleep 9999 &
[2]+  6794 Stopped (user)          sleep 1234

Now the process is paused you can switch it to the background using the bg command:

root@solaris:~# bg %2
[2]+ sleep 1234 &
root@solaris:~# jobs -l
[1]-  6790 Running                 sleep 9999 &
[2]+  6794 Running                 sleep 1234 &

Note that when the job is sent to the background, it automatically starts to run.

When you want to switch the process back to the foreground, you must again pause it. However, in this case, you cannot use ^Z. Instead you need to send a signal to the process using the kill command:

root@solaris:~# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGEMT	 8) SIGFPE	 9) SIGKILL	10) SIGBUS
11) SIGSEGV	12) SIGSYS	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGUSR1	17) SIGUSR2	18) SIGCHLD	19) SIGPWR	20) SIGWINCH
21) SIGURG	22) SIGIO	23) SIGSTOP	24) SIGTSTP	25) SIGCONT
26) SIGTTIN	27) SIGTTOU	28) SIGVTALRM	29) SIGPROF	30) SIGXCPU
31) SIGXFSZ	32) SIGWAITING	33) SIGLWP	34) SIGFREEZE	35) SIGTHAW
36) SIGCANCEL	37) SIGLOST	38) SIGXRES	39) SIGJVM1	40) SIGJVM2
41) SIGRTMIN	42) SIGRTMIN+1	43) SIGRTMIN+2	44) SIGRTMIN+3	45) SIGRTMIN+4
46) SIGRTMIN+5	47) SIGRTMIN+6	48) SIGRTMIN+7	49) SIGRTMIN+8	50) SIGRTMIN+9
51) SIGRTMIN+10	52) SIGRTMIN+11	53) SIGRTMIN+12	54) SIGRTMIN+13	55) SIGRTMIN+14
56) SIGRTMIN+15	57) SIGRTMAX-15	58) SIGRTMAX-14	59) SIGRTMAX-13	60) SIGRTMAX-12
61) SIGRTMAX-11	62) SIGRTMAX-10	63) SIGRTMAX-9	64) SIGRTMAX-8	65) SIGRTMAX-7
66) SIGRTMAX-6	67) SIGRTMAX-5	68) SIGRTMAX-4	69) SIGRTMAX-3	70) SIGRTMAX-2
71) SIGRTMAX-1	72) SIGRTMAX	

The signal we need to send is the SIGSTOP:

oot@solaris:~# kill -23 %2
root@solaris:~# jobs -l
[1]-  6790 Running                 sleep 9999 &
[2]+  6794 Stopped (signal)        sleep 1234

Now you can bring the process to the forground using the fg command:

root@solaris:~# fg %2
sleep 1234
^C

The wait command

The wait command transforms an asynchronous command into a synchronous command.

For example:

root@solaris:~# jobs -l
[1]+  6790 Running                 sleep 9999 &
root@solaris:~# wait %1
^C
root@solaris:~# jobs -l
[1]+  6790 Running                 sleep 9999 &

The prioctnl Command

Whilst the nice command still exists in Solaris 11, its use is deprecated and it has been included only for backward compatibility. Solaris 11 provides the priocntl command for process scheduling.

The priocntl switches are as follows:

Switch Definition
-l Lists the currently loaded scheduling tasks
-d Displays the scheduling parameters of a process
-e Creates a process by executing a command
-p Changes the priority of an existing process
-c Specifies the class in which the command executes

Firstly, display the currently loaded scheduling tasks:

root@solaris:~# priocntl -l
CONFIGURED CLASSES
==================

SYS (System Class)

TS (Time Sharing)
	Configured TS User Priority Range: -60 through 60

SDC (System Duty-Cycle Class)

FX (Fixed priority)
	Configured FX User Priority Range: 0 through 60

IA (Interactive)
	Configured IA User Priority Range: -60 through 60

RT (Real Time)
	Configured RT User Priority Range: 0 through 59

To display the scheduling parameters of the sleep process created earlier, use the following command replacing the PID value with the PID of your process:

root@solaris:~# priocntl -d -i pid 6790
INTERACTIVE CLASS PROCESSES:
   PID[/LWP]       IAUPRILIM     IAUPRI     IAMODE
   6790                0            0          1

This output shows three columns:

Column Description
IAUPRILIM The inter-active per process user priority
IAUPRI The inter-active user priority limit
IAMODE The inter-active mode bit. When set, the process is given a priority boost of 10

To now modify the process priority ( nice value ) of your sleep command, use the following command and display the result:

root@solaris:~# priocntl -s -p -5 -i pid 6790
root@solaris:~# priocntl -d -i pid 6790
INTERACTIVE CLASS PROCESSES:
   PID[/LWP]       IAUPRILIM     IAUPRI     IAMODE
   6790                0           -5          1

Note that a negative value reduces the global priority of the process. For more information concerning the use of this command, consult this page

The nohup Command

The nohup utility invokes the named command with the arguments supplied. When the command is invoked, nohup arranges for the SIGHUP signal to be ignored by the process. When invoked with the -p or -g switches, nohup arranges for processes already running as identified by a list of process IDs or a list of process group IDs to become immune to hang-ups.

root@solaris:~# nohup lp /root/sales &

proc tools

pcred

The pcred command shows the owner of a specified process:

root@solaris:~# pcred 1
1:	e/r/suid=0  e/r/sgid=0

pfiles

The pfiles command output diplays the open files associated with a process:

root@solaris:~# pfiles 1
1:	/usr/sbin/init
  Current rlimit: 256 file descriptors
   0: S_IFIFO mode:0600 dev:585,1 ino:4616249 uid:0 gid:0 size:0
      O_RDWR|O_NDELAY
      /system/volatile/initpipe
 253: S_IFREG mode:0444 dev:583,1 ino:65538 uid:0 gid:0 size:0
      O_RDONLY|O_LARGEFILE FD_CLOEXEC
      /system/contract/process/pbundle
      offset:0
 254: S_IFREG mode:0666 dev:583,1 ino:65539 uid:0 gid:0 size:0
      O_RDWR|O_LARGEFILE FD_CLOEXEC
      /system/contract/process/template
      offset:0
 255: S_IFREG mode:0666 dev:583,1 ino:65539 uid:0 gid:0 size:0
      O_RDWR|O_LARGEFILE FD_CLOEXEC
      /system/contract/process/template
      offset:0

pflags

The pflags command prints the /proc tracing flags, the pending and held signals and other /proc status information for the process:

root@solaris:~# pflags 1
1:	/usr/sbin/init
	data model = _ILP32  flags = ORPHAN|MSACCT|MSFORK
 /1:	flags = ASLEEP  pollsys(0x806c040,0x1,0xf5d29688,0x0)

pldd

The pldd command lists the dynamic libraries linked into each process:

root@solaris:~# pldd 1
1:	/usr/sbin/init
/usr/lib/libc/libc_hwcap1.so.1
/lib/libcontract.so.1
/lib/libnvpair.so.1
/lib/libnsl.so.1
/lib/libscf.so.1
/lib/libuutil.so.1
/lib/libbsm.so.1
/lib/libtsol.so.2

pstack

The pstack command prints a hex+symbolic stack trace for each process:

root@solaris:~# pstack 1
1:	/usr/sbin/init
 f4704ed7 pollsys  (806c040, 1, f5d29688, 0)
 f46aacc5 poll     (806c040, 1, 493e0, 80545cf) + 81
 080546b3 main     (1, f5d2a00c, f5d2a014, f48278bc) + 427
 080541ed _start   (1, f5d2a088, 0, 0, 7d8, f5d2a097) + 7d

ptree

The ptree command prints a tree of all running processes showing their dependencies:

root@solaris:~# ptree
934   /usr/lib/fm/fmd/fmd
936   /usr/lib/ssh/sshd
957   /usr/sbin/syslogd
978   /usr/lib/sendmail -Ac -q15m
979   /usr/sbin/auditd
982   /usr/lib/sendmail -bl -q15m
1002  /usr/lib/vtdaemon -c 16
1106  /usr/lib/devchassis/devchassisd
1109  /usr/lib/inet/in.ndpd
1119  /usr/lib/rmvolmgr -s
1122  /usr/sbin/gdm-binary
  1143  /usr/lib/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
    1159  /usr/bin/Xorg :0 -nolisten tcp -br -novtswitch -auth /tmp/gdm-auth-cookies-DOaq
    1992  /usr/lib/gdm-session-worker
      3579  gnome-session
        3620  /usr/bin/ssh-agent -- gnome-session
        3644  metacity
        3645  gnome-panel
        3648  nautilus
        3653  /usr/lib/nwam-manager
        3658  /usr/bin/python2.6 /usr/lib/updatemanagernotifier
        3660  python2.6 /usr/lib/system-config-printer/applet.py
        3661  java -Djava.security.policy=/usr/share/vpanels/java.policy com.oracle.solaris.v
        3668  gnome-power-manager
        3674  /usr/bin/xscreensaver -nosplash
        3685  gnome-volume-control-applet
        3688  python2.6 /usr/lib/time-slider-notify
1129  /usr/lib/fm/notify/asr-notify
1138  /usr/lib/fm/notify/smtp-notify
1406  /usr/sbin/cupsd -C /etc/cups/cupsd.conf
1456  /usr/bin/dbus-launch --exit-with-session
1495  /usr/apache2/2.2/bin/htcacheclean -d20160 -i -l 2048M -n -p /var/cache/pkg/sysr
1661  /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
  1665  /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
  1666  /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
  1667  /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
  1668  /usr/apache2/2.2/bin/64/httpd.worker -f /system/volatile/pkg/sysrepo/sysrepo_ht
1664  /usr/lib/zones/zoneproxyd
1822  zoneadmd -z myzone
2122  /usr/lib/ocm/ccr/bin/nmz
3608  dbus-launch --exit-with-session --sh-syntax
3609  /usr/lib/dbus-daemon --fork --print-pid 6 --print-address 8 --session
3633  /usr/lib/gconfd-2
3636  /usr/bin/gnome-keyring-daemon --start --components=pkcs11
3640  /usr/lib/gnome-settings-daemon
3643  /usr/lib/gvfsd
3647  /usr/lib/gvfs-hal-volume-monitor
3650  /usr/lib/bonobo-activation-server --ac-activate --ior-output-fd=21
3652  /usr/lib/wnck-applet --oaf-activate-iid=OAFIID:GNOME_Wncklet_Factory --oaf-ior-
3655  /usr/lib/trashapplet --oaf-activate-iid=OAFIID:GNOME_Panel_TrashApplet_Factory 
3657  /usr/lib/gvfsd-trash --spawner :1.9 /org/gtk/gvfs/exec_spaw/0
3675  /usr/bin/VBoxClient --clipboard
3679  /usr/bin/VBoxClient --display
3682  /usr/bin/VBoxClient --seamless
3683  /usr/bin/VBoxClient --draganddrop
3698  /usr/lib/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf
3700  /usr/lib/notification-area-applet --oaf-activate-iid=OAFIID:GNOME_NotificationA
3709  /usr/bin/pulseaudio --start
3720  /usr/lib/gvfsd-metadata
3722  /usr/lib/notification-daemon
3725  /usr/bin/firefox
3738  gnome-terminal
  3739  gnome-pty-helper
  3741  bash
    3742  su -
      3743  -bash
        6891  sleep 9999
        6932  ptree
3782  /usr/lib/gam_server
4985  zsched
  5614  /usr/sbin/init
5770  /lib/svc/bin/svc.startd
  6201  /usr/sbin/ttymon -g -d /dev/console -l console -T vt100 -m ldterm,ttcompat -h -
5774  /lib/svc/bin/svc.configd
5804  /lib/inet/netcfgd
5834  /lib/crypto/kcfd
5843  /usr/lib/pfexecd
5889  /usr/lib/utmpd
5893  /lib/inet/ipmgmtd
5906  /lib/inet/in.mpathd
5960  /lib/inet/nwamd
5968  /sbin/dhcpagent
6090  /usr/lib/zones/zoneproxy-client -s localhost:1008
6123  /usr/sbin/cron
6136  /usr/sbin/nscd
6165  /usr/sbin/rpcbind
6173  /usr/lib/autofs/automountd
  6174  /usr/lib/autofs/automountd
6178  /usr/lib/inet/inetd start
6180  /usr/lib/fm/fmd/fmd
6181  /usr/lib/nfs/nfsmapid
6199  /usr/lib/ssh/sshd
6216  /usr/sbin/syslogd
6227  /usr/lib/sendmail -Ac -q15m
6236  /usr/lib/sendmail -bl -q15m
6242  /usr/lib/fm/notify/smtp-notify
6255  /usr/lib/inet/in.ndpd
11    /lib/svc/bin/svc.startd
  985   /usr/sbin/ttymon -g -d /dev/console -l console -T sun-color -m ldterm,ttcompat 
  1012  /usr/sbin/ttymon -g -d /dev/vt/4 -l console -m ldterm,ttcompat -h -p solaris.fe
  1013  /usr/sbin/ttymon -g -d /dev/vt/2 -l console -m ldterm,ttcompat -h -p solaris.fe
  1014  /usr/sbin/ttymon -g -d /dev/vt/6 -l console -m ldterm,ttcompat -h -p solaris.fe
  1015  /usr/sbin/ttymon -g -d /dev/vt/5 -l console -m ldterm,ttcompat -h -p solaris.fe
  1016  /usr/sbin/ttymon -g -d /dev/vt/3 -l console -m ldterm,ttcompat -h -p solaris.fe
13    /lib/svc/bin/svc.configd
42    /lib/inet/netcfgd
50    /usr/sbin/dlmgmtd
85    /lib/crypto/kcfd
95    /lib/inet/ipmgmtd
104   /lib/inet/in.mpathd
118   /usr/lib/pfexecd
191   /usr/lib/utmpd
203   /usr/lib/zones/zonestatd
225   /usr/lib/sysevent/syseventd
235   /usr/sbin/vbiosd
237   /usr/lib/rad/rad -sp
  3723  /usr/lib/rad/rad -m /usr/lib/rad/transport -m /usr/lib/rad/protocol -m /usr/lib
241   /usr/lib/dbus-daemon --system
413   /usr/lib/devfsadm/devfsadmd
570   /lib/inet/nwamd
637   /sbin/dhcpagent
679   /usr/lib/picl/picld
814   /usr/sbin/nscd
823   /lib/svc/method/iscsid
874   /usr/sbin/cron
881   /usr/sbin/rpcbind
890   /usr/lib/nfs/nfsmapid
891   /usr/lib/inet/inetd start
892   /usr/lib/hal/hald --daemon=yes
  895   hald-runner
    941   /usr/lib/hal/hald-addon-cpufreq
    943   /usr/lib/hal/hald-addon-acpi
    996   /usr/lib/hal/hald-addon-storage
896   /usr/sbin/console-kit-daemon
898   /usr/lib/autofs/automountd
  899   /usr/lib/autofs/automountd
932   /usr/bin/VBoxService
6274  gedit
6736  nautilus --no-desktop /home/trainee

pwdx

The pwdx command prints the current working directory of a process:

root@solaris:~# pwdx 1
1:	/

Process Scheduling

cron

The crond service, launched at boot time, is responsible for executing certain scripts and commands at specific intervals. The crond service assumes that the system is online permanently. In the case of a downtime coinciding with a cronjob, the cronjob is simply not executed until the following period.

In Solaris 11, every 60 seconds crond reads the system crontab files ( /var/spool/cron/crontabs/root, /var/spool/cron/crontabs/sys and /var/spool/cron/crontabs/adm ), any crontabs in /etc/cron.d/ and all the user crontabs:

root@solaris:~# cat /var/spool/cron/crontabs/root
#ident	"%Z%%M%	%I%	%E% SMI"
#
# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# The root crontab should be used to perform accounting data collection.
#
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 [ -x /usr/lib/fs/nfs/nfsfind ] && /usr/lib/fs/nfs/nfsfind
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
30 0,9,12,18,21 * * * /usr/lib/update-manager/update-refresh.sh
root@solaris:~# cat /var/spool/cron/crontabs/sys
#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.2	*/
#
# The sys crontab should be used to do performance collection. See cron
# and performance manual pages for details on startup.
#
# 0 * * * 0-6 /usr/lib/sa/sa1
# 20,40 8-17 * * 1-5 /usr/lib/sa/sa1
# 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
root@solaris:~# cat /var/spool/cron/crontabs/adm
#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.2	*/
#
# The adm crontab file should contain startup of performance collection if
# the profiling and performance feature has been installed.
#

User crontabs are files named after the user who created them and can be found in /var/spool/cron/crontabs/:

root@solaris:~# ls /var/spool/cron/crontabs/
adm   root  sys

The crond service writes to the log file /var/cron/log:

root@solaris:~# cat /var/cron/log
! *** cron started ***   pid = 1176 Tue Nov 20 19:27:50 2012
! SIGTERM Tue Nov 20 22:44:25 2012
! ******* CRON ABORTED ******** Tue Nov 20 22:44:25 2012
! *** cron started ***   pid = 861 Tue Nov 20 22:46:22 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 3328 c Wed Nov 21 00:30:00 2012
<  root 3328 c Wed Nov 21 00:34:25 2012
! *** cron started ***   pid = 871 Sat Dec  1 14:33:18 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 3259 c Mon Dec  3 13:13:02 2012
! time was reset, re-initializing Mon Dec  3 13:13:02 2012
! SIGTERM Mon Dec  3 13:14:29 2012
! ******* CRON ABORTED ******** Mon Dec  3 13:14:29 2012
! *** cron started ***   pid = 856 Mon Dec  3 13:16:23 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 4816 c Fri Dec  7 11:23:09 2012
! time was reset, re-initializing Fri Dec  7 11:23:09 2012
<  root 4816 c Fri Dec  7 11:41:03 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 4858 c Fri Dec  7 13:26:23 2012
! time was reset, re-initializing Fri Dec  7 13:26:23 2012
<  root 4858 c Fri Dec  7 13:26:23 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 7226 c Mon Dec 10 15:35:15 2012
! time was reset, re-initializing Mon Dec 10 15:35:15 2012
<  root 7226 c Mon Dec 10 15:35:15 2012
! SIGTERM Tue Dec 11 12:13:34 2012
! ******* CRON ABORTED ******** Tue Dec 11 12:13:34 2012
! *** cron started ***   pid = 7956 Tue Dec 11 12:16:49 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 7963 c Tue Dec 11 12:30:00 2012
<  root 7963 c Tue Dec 11 12:30:00 2012
! SIGTERM Tue Dec 11 12:43:27 2012
! ******* CRON ABORTED ******** Tue Dec 11 12:43:27 2012
! *** cron started ***   pid = 8011 Tue Dec 11 13:12:56 2012
! re-scheduling jobs Tue Dec 11 13:59:39 2012
! SIGTERM Tue Dec 11 15:01:00 2012
! ******* CRON ABORTED ******** Tue Dec 11 15:01:00 2012
! *** cron started ***   pid = 9610 Tue Dec 11 15:02:25 2012
! SIGTERM Tue Dec 11 15:24:31 2012
! ******* CRON ABORTED ******** Tue Dec 11 15:24:31 2012
! *** cron started ***   pid = 10892 Tue Dec 11 15:25:14 2012
! SIGTERM Tue Dec 11 15:32:51 2012
! ******* CRON ABORTED ******** Tue Dec 11 15:32:51 2012
! *** cron started ***   pid = 865 Tue Dec 11 15:34:07 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 2646 c Wed Dec 12 08:46:52 2012
! time was reset, re-initializing Wed Dec 12 08:46:52 2012
! SIGTERM Wed Dec 12 08:47:05 2012
! ******* CRON ABORTED ******** Wed Dec 12 08:47:05 2012
! *** cron started ***   pid = 854 Wed Dec 12 08:57:20 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 2375 c Wed Dec 12 09:30:00 2012
<  root 2375 c Wed Dec 12 09:30:00 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 2511 c Wed Dec 12 13:33:08 2012
! time was reset, re-initializing Wed Dec 12 13:33:08 2012
<  root 2511 c Wed Dec 12 13:33:08 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 3397 c Thu Dec 13 11:02:43 2012
! time was reset, re-initializing Thu Dec 13 11:02:43 2012
<  root 3397 c Thu Dec 13 11:08:46 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 3487 c Thu Dec 13 12:58:15 2012
! time was reset, re-initializing Thu Dec 13 12:58:15 2012
<  root 3487 c Thu Dec 13 12:58:15 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 4616 c Fri Dec 14 11:22:45 2012
! time was reset, re-initializing Fri Dec 14 11:22:45 2012
<  root 4616 c Fri Dec 14 11:22:45 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 4633 c Fri Dec 14 12:30:19 2012
<  root 4633 c Fri Dec 14 12:30:19 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 14029 c Sat Dec 15 06:21:22 2012
! time was reset, re-initializing Sat Dec 15 06:21:22 2012
! *** cron started ***   pid = 874 Sat Dec 15 07:26:36 2012
! time was reset, re-initializing Sat Dec 15 06:26:41 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 6724 c Sat Dec 15 10:39:14 2012
! time was reset, re-initializing Sat Dec 15 10:39:14 2012
<  root 6724 c Sat Dec 15 10:39:14 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 6795 c Mon Dec 17 15:47:04 2012
! time was reset, re-initializing Mon Dec 17 15:47:04 2012
<  root 6795 c Mon Dec 17 15:47:05 2012
>  CMD: /usr/lib/update-manager/update-refresh.sh
>  root 6884 c Mon Dec 17 19:24:51 2012
! time was reset, re-initializing Mon Dec 17 19:24:51 2012
<  root 6884 c Mon Dec 17 19:24:51 2012

If a command or script produces an output, that output is sent to root by mail.

The root user can establish lists of users that can or cannot create their own crontabs by editing either the /etc/cron.d/cron.allow or /etc/cron.d/cron.deny files:

root@solaris:~# ls /etc/cron.d
at.deny    cron.deny  queuedefs
root@solaris:~# cat /etc/cron.d/cron.deny
daemon
bin
nuucp

Each line in a crontab starts with five columns:

Minutes Hours Day of the month Month Day of the week
(0-59) (0-23) (1-31) (1-12) (0-6)*

* 0 is Sunday.

The following examples of values in those columns help explain how versatile a crontab can be:

Example Description
An absolute value such as 10 In the Minutes column = 10 minutes after each hour
A series of values such as 2,6,8 In the Month column = February, June and August
A range such as 1-5 In the Day of the week column = From Monday through to Friday
The wildcard * In the Day of the month column = Every day of the month
A regular interval such as 0-23/2 In the Hour column = Every two hours

The crond service can be configured by editing the /etc/default/cron file:

root@solaris:~# cat /etc/default/cron
#
# Copyright 1991 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#pragma ident	"%Z%%M%	%I%	%E% SMI"

CRONLOG=YES

In this file you can define variables such as PATH for normal users and SUPATH for the root role.

As already stated, each authorized user can create a crontab. To check if a crontab exists, the user needs to execute the following command:

trainee@solaris:~$ crontab -l
crontab: can't open your crontab file.

In order to create a crontab, the user should use the following command:

trainee@solaris:~$ crontab -e

at

As in the case of cron, root has the ability to control who can and cannot use the at command by editing one of the following:

  • /etc/cron.d/at.allow,
  • /etc/cron.d/at.deny.

If the at.allow file exists, only users in that file can use the at command.

Now take the example of root creating two at jobs for the 31/12 at 1pm and 2pm respectively:

root@solaris:~# at 13:00 Dec 31
at> pwd > /tmp/test1.atd
at> <EOT>
commands will be executed using /usr/bin/bash
job 1356955200.a at Mon Dec 31 13:00:00 2012
root@solaris:~# 
root@solaris:~# at 14:00 Dec 31
at> free > /tmp/test2.atd
at> <EOT>
commands will be executed using /usr/bin/bash
job 1356958800.a at Mon Dec 31 14:00:00 2012

The at files created can be found in /var/spool/cron/atjobs/:

root@solaris:~# ls /var/spool/cron/atjobs/
1356955200.a     1356955200.a.au  1356958800.a     1356958800.a.au

Viewing the contents of the first file you will see something similar to the following example:

root@solaris:~# cat /var/spool/cron/atjobs/1356955200.a 
: at job
: jobname: stdin
: notify by mail: no
: project: 1
export HZ; HZ=''
export SHELL; SHELL='/usr/bin/bash'
export TERM; TERM='xterm'
export PAGER; PAGER='/usr/bin/less -ins'
export MAIL; MAIL='/var/mail/root'
export PATH; PATH='/usr/bin:/usr/sbin'
export PWD; PWD='/root'
export LANG; LANG='en_US.UTF-8'
export SHLVL; SHLVL='1'
export HOME; HOME='/root'
export LOGNAME; LOGNAME='root'
export _; _='/usr/bin/at'
$SHELL << '...the rest of this file is shell input'
#
# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.2	*/
cd /root
umask 22
pwd > /tmp/test1.atd

To delete that job you can use the at command with the following syntax:

root@solaris:~# at -l
user = root	1356958800.a	Mon Dec 31 14:00:00 2012
user = root	1356955200.a	Mon Dec 31 13:00:00 2012
root@solaris:~# at -r 1356958800.a
root@solaris:~# at -l
user = root	1356955200.a	Mon Dec 31 13:00:00 2012

To execute several commands at the same time, it is simple to create a text file containing the commands and then to redirect the contents of the file to at's standard input:

root@solaris:~# touch todo.list
root@solaris:~# echo pwd > todo.list
root@solaris:~# echo free >> todo.list
root@solaris:~# echo who >> todo.list
root@solaris:~# cat todo.list
pwd
free
who
root@solaris:~# at 14:30 Dec 31 < todo.list
commands will be executed using /usr/bin/bash
job 1356960600.a at Mon Dec 31 14:30:00 2012

<html> <div align=“center”> Copyright © 2019 Hugh Norris. </html>

Menu