This isn't the question you asked, but since you mentioned $ZU functions, please bear in mind that:

  • $ZU functions are deprecated
  • $ZU functions are no longer documented
  • Users are encouraged to replace $ZU functions with methods and properties in InterSystems class libraries that perform the equivalent actions

Your specific example, $ZU(67,15,$j), is replaced by ##class(%SYSTEM.Process).ClientIPAddress($j).



Hello Bob,

I believe something similar to the following is what others have been suggesting.

open file:("WNS"):3
if ('$test) {  write !,"Failed to open "_file  quit  }
use file
do ALL^%SS
close file

This works for me.  Is this what you did?  Is it not working for you?

Note that, unlike my minimal example, your code should of course include proper error trapping/handling.

Hope that helps,


Here's one that worked for me.

Day2(filename) PUBLIC {
    set input=##class(%Stream.FileCharacter).%New()
    set input.Filename=filename
    set doubles=0,triples=0
    while 'input.AtEnd {
        set string=input.ReadLine()
        kill chars
        set D=0,T=0
        for pos=1:1:$length(string) {
            set count=$increment(chars($extract(string,pos)))
            if (count=2) {
                set D=D+1
            } elseif (count=3) {
                set T=T+1
                set D=D-1
        set doubles=doubles+(D>0)
        set triples=triples+(T>0)
    write !,"Doubles: "_doubles
    write !,"Triples: "_triples
    write !,"Checksum: "_(doubles*triples)

Hello Scott,

I was playing around with the EnumerateConfigItems query in the Ens.Config.Production class, and it seems like it might do what you're asking.  Below is some basic example code to demonstrate, but of course you should test this out yourself and add proper status checking and error handling before putting it to use.

If you are interested in other fields returned by this query, you can take a closer look at its class reference documentation.

#include Ensemble

ListBusinessServices() PUBLIC {
                Set productionName = "Demo.Loan.FindRateProduction"
                Set tStatement = ##class(%SQL.Statement).%New()
                Set pStatus = tStatement.%PrepareClassQuery("Ens.Config.Production","EnumerateConfigItems")
                Set tResult = tStatement.%Execute(productionName,$$$eHostTypeService)
                While tResult.%Next() {
                                Write !,tResult.%Get("ConfigName")

Hello Laura,

If you are doing this interactively, then the ^JOBEXAM utility might come in handy:

1.  Do ^JOBEXAM (in the %SYS namespace of a terminal session)

2.  Type E and then enter either the Job # or P followed by the pid of the target process (e.g. P7176)

3.  Type P to view process-private globals

4.  Enter the name of the process-private global you want to examine.  Examples:

Process Private Global (?): testing
Process Private Global (?): testing(1)

Does this help you accomplish what you were trying to do?

Hi Mikhail and Dmitry,


I support your interests into this subject matter, and am glad you're finding the information useful. The write daemon is a topic which we would generally prefer to talk about one-on-one so we can get a deeper understanding of your individual questions, concerns, and business needs. Accordingly, if these are questions you would like to pursue, I would recommend opening WRC cases with our Support department so we can work more closely with each of you.

Hi Mikhail,

The purpose of having multiple write daemons on non-Windows platforms is to improve the performance of the write daemon during the phase of the write cycle when database blocks get written to disk.  Having multiple write daemons (instead of just one) allows multiple I/Os to be performed simultaneously, thereby shortening the overall length of the write cycle.  Alexey’s earlier comment is partially accurate; in the past, allocation of database blocks to write daemons was done by database.  However, in recent versions, allocation of database blocks to write daemons has been altered to spread the workload more evenly across all write daemons, improving performance even further.

Hello Glenda. Some internal checks of certificates and private key files used by SSL configurations were added in 2015.1, so that may be related to the issue you are experiencing. I would recommend contacting the InterSystems Worldwide Response Center (WRC) for assistance in investigating the cause of this and devising a solution.