ipxfwstopsig

Date:

10-20-2011

NAME

IPXFWSTOPSIG - Returns part of the lower bits of signal number that terminates child process

SYNOPSIS

INTEGER FUNCTION IPXFWSTOPSIG(istat)INTEGER istat

IMPLEMENTATION

Cray Linux Environment (CLE)

DESCRIPTION

The IPXFWSTOPSIG integer function returns part of the lower bits of the signal number that caused the child process to stop. The PXFWIFSTOPPED logical function returns TRUE to indicate that the child process has stopped. IPXFWSTOPSIG should only be used if PXFWIFSTOPPED returns TRUE.

The following argument is used for this routine:

istat

An input integer variable with the PXFWAIT or PXFWAITPID output status argument.

When using the Cray Fortran compiler, all arguments must be of default kind unless documented otherwise. The default kind is KIND=4 for integer, real, complex, and logical arguments.

EXAMPLES

program pxftest
integer istat, iretpid, ipid, ierror, i, j
integer iwstopsig, IPXFWSTOPSIG
logical lwifstopped, PXFWIFSTOPPED
CALL PXFFORK(ipid,ierror)
if (ierror .ne. 0) then
   print *,'FAILED: PXFFORK call failed with error = ',ierror
else
print *,'PASSED: PXFFORK call'
if (ipid .eq. 0) then
     j = 0
     do i=1,100000
        j = j + i
     enddo
     call PXFGETPID(ichldid,ierror)
     if (ierror .ne. 0) then
        print *, 'PXFGETPID FAILED, ierror=', ierror
        print *, 'ichldid=', ichldid
     else
        print *, 'PXFGETPID PASSED'
     endif
     call PXFCONST("SIGSTOP",isig,ierror)
        if (ierror .ne. 0) then
           print *, 'PXFCONST FAILED, ierror=', ierror
           print *, 'isig=', isig
        else
           print *, 'PXFCONST PASSED'
        endif
        call PXFKILL(ichldid,isig,ierror)
        if (ierror .ne. 0) then
           print *, 'PXFKILL FAILED ierror=', ierror
           print *, 'ichldid=', ichldid
           print *, 'isig=', isig
        else
           print *, 'PXFKILL PASSED'
        endif
           stop "CHILD"
   else
        call PXFCONST("WUNTRACED",iopts,ierror)
        if (ierror .ne. 0) then
           print *, 'PXFCONST FAILED, ierror=', ierror
           print *, 'iopts=', iopts
        else
           print *, 'PXFCONST PASSED'
        endif
        CALL PXFWAITPID(ipid,istat,iopts,iretpid,ierror)
        if (ierror .eq. 0) then
           print *,'PASSED: PXFWAIT test'
           lwifstopped = PXFWIFSTOPPED(istat)
              if (lwifstopped .eqv. .TRUE.) then
                 iwstopsig = IPXFWSTOPSIG(istat)
                    if (iwstopsig .ne. 0) then
                        print *,'PXFWIFSTOPPED test PASSED'
                        print *,'IPXFWSTOPSIG test PASSED'
                        call PXFCONST("SIGCONT",isig,ierror)
                            if (ierror .ne. 0) then
                               print *,'PXFCONST FAILED,ierror=',ierror
                               print *,'isig=', isig
                           else
                               print *, 'PXFCONST PASSED'
                           endif
! continue the child process
                           call PXFKILL(ipid,isig,ierror)
                    else
                        print *,'PXFWIFSTOPPED test PASSED'
                        print *,'IPXFWSTOPSIG test FAILED'
                        print *,'PXFWIFSTOPPED returned TRUE'
                        print *,'IPXFWSTOPSIG(istat) = ',iwstopsig
                        print *,'istat = ', ipid
                        print *,'PXFWAIT istat = ', istat
                        print *,'iretpid= ', iretpid
                    endif
              else
                 print *,'PXFWIFSTOPPED returned FALSE'
                 print *,'istat = ', ipid
                 print *,'PXFWAIT istat = ', istat
                 print *,'iretpid= ', iretpid
                 print *,'IPXFWSTOPSIG cannot be called.'
              endif
        else
           print *,'FAILED: PXFWAIT call with error = ',ierror
           print *,'istat = ', ipid
           print *,'istat = ', istat
           print *,'iretpid = ', iretpid
        endif
   endif
endif
print *,'test complete'
end

SEE ALSO

PXFWAIT(3F), PXFWIFSTOPPED(3F)