Skip to main content

Hi.

Since 1994 I have designed and implemented an application in HPUX under MICROFOCUS SERVER EXPRES. 
Now I have to migrate that application to LINUX, but my surprise is that the architecture of that application, inspired by parent child processes,
does not allow this migration due to the use of the fork() function. error 96.
It doesn't help me to implement multithreading or calls to exec() functions because that means rendering the entire application.
Any ideas? The application covers a critical service of a financial entity.

Hi.

Since 1994 I have designed and implemented an application in HPUX under MICROFOCUS SERVER EXPRES. 
Now I have to migrate that application to LINUX, but my surprise is that the architecture of that application, inspired by parent child processes,
does not allow this migration due to the use of the fork() function. error 96.
It doesn't help me to implement multithreading or calls to exec() functions because that means rendering the entire application.
Any ideas? The application covers a critical service of a financial entity.

The documentation below and kb, gives you more information and alternatives.

You might also want to take a look at the COBOL threading documentation.

--from-docs:

Early warning of compatibility issues with current operating systems

In order to better support modern operating systems, we are aligning closely with their operability guidelines. We now detect previously-undefined behaviour when interacting with OS-level functions.

Error RTS096 alerts you to any calls to the operating system's fork() API, in a process that has directly or indirectly called COBOL functionality, in your code.

The error gives you an early diagnosis of a situation which, if left unchecked on modern operating systems, could lead to deadlocks, crashes or other failures at run time. These problems would often occur intermittently and be very challenging to track down.

See the KB article https://community.rocketsoftware.com/discussion/fork-rts64-error-96-encountered-in-child-process#bmef403fbd-658c-4cbd-8d18-3ebf1cf78cc7 for more details.


The documentation below and kb, gives you more information and alternatives.

You might also want to take a look at the COBOL threading documentation.

--from-docs:

Early warning of compatibility issues with current operating systems

In order to better support modern operating systems, we are aligning closely with their operability guidelines. We now detect previously-undefined behaviour when interacting with OS-level functions.

Error RTS096 alerts you to any calls to the operating system's fork() API, in a process that has directly or indirectly called COBOL functionality, in your code.

The error gives you an early diagnosis of a situation which, if left unchecked on modern operating systems, could lead to deadlocks, crashes or other failures at run time. These problems would often occur intermittently and be very challenging to track down.

See the KB article https://community.rocketsoftware.com/discussion/fork-rts64-error-96-encountered-in-child-process#bmef403fbd-658c-4cbd-8d18-3ebf1cf78cc7 for more details.

Thank you. Would compiling in non-multithreaded mode fix the problem?. Without -t option 

Thank you. Would compiling in non-multithreaded mode fix the problem?. Without -t option 

No, that will not change the behaviour.   You will need to either do a "fork().. then exec()" or look at alternative ways of multi-threading, for example using threading


No, that will not change the behaviour.   You will need to either do a "fork().. then exec()" or look at alternative ways of multi-threading, for example using threading

Ok thanks.

So I think that this version is not prepared to do migrations of complex applications. 
Please, could you tell me from which version this restriction is included?. The fork().. then exec()
It doesn't have the same effect for example for sharing descriptors like sockets() etc.

Ok thanks.

So I think that this version is not prepared to do migrations of complex applications. 
Please, could you tell me from which version this restriction is included?. The fork().. then exec()
It doesn't have the same effect for example for sharing descriptors like sockets() etc.

I am not sure that I agree that statement, as this issue falls into a gray area where you were using the product in a unexpected way, which was then found to be problematic and was further compounded by changes in host operating system.

I am hopeful that we can find a solution for you but I think this conversation is best moved to a support incident, as I think more detail on the issue will be required


I am not sure that I agree that statement, as this issue falls into a gray area where you were using the product in a unexpected way, which was then found to be problematic and was further compounded by changes in host operating system.

I am hopeful that we can find a solution for you but I think this conversation is best moved to a support incident, as I think more detail on the issue will be required

As I mentioned, Our application has been running on an HPUX with SERVER EXPRESS
since 1994 and we have never had any problems.
We have opened an incident, but it seems that they do not give us a solution and this may mean redesigning 100% of the application.
We are going to migrate to GNU COBOL as the only possible measure, leaving the MICROFOCUS product.
CaseID 02257492