IBM Support

Argument Number Limits for ls, rm, and other Qshell Commands - "qsh: 001-0078 Process ended by signal 5"

Troubleshooting


Problem

This document will describe the limitations on the number of arguments that can be passed into the ls, rm, and other similar Qshell commands.

Resolving The Problem

This document describes the limitations on the number of arguments that can be passed into the ls, rm, and other similar Qshell commands.

Problem

The following message might occur when passing a large amount of arguments to the ls, rm, or other similar Qshell commands:

"qsh: 001-0078 Process ended by signal 5"

If you look in the QP0ZSPWP joblog in which the utility (ls, rm, and so on) ran, you will find the following error message:

MCH6801    Escape                  40   10/21/10  13:04:41.105575  < nRequested             000000   QP0ZEXEC    QSYS        *STMT

From Program  . . . . . . . :   InvalidOperationRequested
To module . . . . . . . . . :   QP0ZEXECUT
To procedure  . . . . . . . :   run__14Qp0zExecutableFv
Statement . . . . . . . . . :   6
Message . . . . :   Object domain or storage protection error for offset X'0000000000000000' in object &1.
Cause . . . . . :   A program tried to use a blocked instruction, access a
system domain object, or make invalid use of a protected page. The violation
type is 1. The violation type indicates the type of error: 1-Object domain
violation.

If you gather a Qshell internal utility trace, you will see the child job exits with the following message.

evalcommand(): child exitstatus=133

Explanation

As documented, a child exit status greater than 128 means the child was ended by a signal. To find the number of the signal, you subtract 128 from the exit status. So, exit status 133 simply means the same as "Process ended by signal 5", which is SIGSEGV.

Qshell invokes the ls, rm, and other utilities using the Posix API Qp0zExecve(). This API passes all the arguments on the command to a Machine Interface program execution instruction called "CALLPGMV()" . This MI instruction is documented at the following URL:
https://www.ibm.com/docs/en/i/7.5?topic=instructions-call-program-variable-length-argument-list-callpgmv

The instruction ("CALLPGMV()") is limited to 16383 arguments by design.

The boundary on the number of arguments allowed to be passed to the ls, rm, or other similar Qshell commands is 16,383. The above messages will be generated if the user is attempting to pass in more than 16,383 arguments. That is, if the pattern matches 16,383 objects, the utility will work. If the pattern matches 16,384 objects, the utility will fail. It appears that when there are that many parameters, someone is getting addressability to system domain storage, and that is getting passed to the user state utility program.

This limitation applies to every Qshell utility that can accept arguments like this. These utilities point to a common parameter handling code, rather than utility-specific handling code.

Related Information

[{"Type":"MASTER","Line of Business":{"code":"LOB68","label":"Power HW"},"Business Unit":{"code":"BU070","label":"IBM Infrastructure"},"Product":{"code":"SWG60","label":"IBM i"},"ARM Category":[{"code":"a8m0z0000000CHQAA2","label":"Qshell"}],"ARM Case Number":"","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"All Versions"}]

Historical Number

577338621

Document Information

Modified date:
15 November 2024

UID

nas8N1011925