A few years ago I investigated the performance of our application on z/OS. The application is written in C and runs in batch and CICS. A customer reported that our latest version was not performing as well as the version they were currently running. Testing showed there was a difference. The same tests did not show a difference on other platforms. z/OS has unique characteristics, not surprising given the hardware it runs on, and there are bound to be factors that affect performance that do not affect other platforms. We build our application using unix system services and link the final modules into a Dataset (load library). What this means is that we can use standard unix shell utilities, make files and other tools just like on any other unix platform. This makes development much easier. The final link is the first time anything leaves the unix environment. When investigating anything on z/OS the first place to go for information is the IBM Redbooks site. I found several books d
A problem was reported by a customer. They were getting a failure and in the logs it reported error → waitpid failed 'Reason: No child processes' The “No child processes” error came from waitpid() after using fork/spawn to launch a utility to load data into a data base. Upon detailed investigation it appears it is possible that some other process that the user is running has changed the default handler for SIGCHLD - possibly the shell (e.g. bash!) used to launch our server processes. If the signal handler is set to SIG_IGN then when a process is started using fork()/exec() the return code from the process is NOT returned and waitpid() cannot retrieve the response code. The most likely reason for "No child processes" error from waitpid() is that the signal handler for child processes (SIGCHLD) is not set to SIG_DFL. This should not be possible however it seems that on Linux a process run in the shell (or maybe a shell process) can set it to SIG_IGN