Принудительно использовать низкий идентификатор процесса для конкретной программы Linux

#linux #process

#linux #процесс

Вопрос:

Мне нужно запустить программу, которая несовместима с высоким идентификатором процесса (> 16 бит) (см. https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/607517 ) и который нельзя изменить на другую версию компилятора (доступную только в двоичном виде) в системе с включенными высокими идентификаторами процессов (pid_max=4194303). Этот процесс всегда завершается сбоем, если он получает PID > 65535 при перенаправлении выходных данных (например, с помощью Jenkins или CTest).

Есть ли способ установить низкий идентификатор процесса для этой конкретной программы, пока система все еще настроена на использование высоких идентификаторов? Это должен делать обычный пользователь без root-доступа (изменение /proc/sys/kernel/pid_max до / после запуска не является решением).

Побочный вопрос: Может ли система RedHat Enterprise Linux / CentOS с pid_max>4000000 рассматриваться как «совместимая с RedHat» или это будет несовместимое изменение?

Комментарии:

1. Я никогда не слышал о такой вещи, и я не могу представить, как это можно было бы сделать. Когда вы запускаете программу, вы сначала разветвляете процесс, который присваивает PID, а затем вызываете exec() для загрузки в него программы. Он не знает, какая программа будет запущена до назначения PID.

2. Вы правы, @Barmar: Таким образом, в принципе, форк уже должен быть ограничен низкими идентификаторами процесса…