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.
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
Was this topic helpful?
Document Information
Modified date:
15 November 2024
UID
nas8N1011925