• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. SKILL function to output the result from lmstat command

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 145
  • Views 15698
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SKILL function to output the result from lmstat command

tyanata
tyanata over 14 years ago

 Hell,

I am trying  to create SKILL function which outputs the result from lmstat command:

 

procedure(Lmstat_out()

    lmstat_com_1 = strcat( "$CDSHOME/tools/bin/lmstat -c 5280@<servername> -f Virtuoso_Multi_mode_Simulation | grep \"Users of Virtuoso_Multi_mode_Simulation:\"" )
    cid=ipcBeginProcess( lmstat_com_1 )
    ipcWaitForProcess(cid)
    ipcReadProcess(cid)
)

 

But the output of this function is empty - ""

Can you give me advice how to debug this procedure?

 

 

  • Cancel
  • StefanSL
    StefanSL over 14 years ago

     Hi tyanata,

    why do you grep for that complicated expression, already grepping for "Users"
    will give just one line of output.

    i just tried

    lmcmd="$CDSHOME/tools/bin/lmstat -c 5280@... -f Virtuoso_Multi_mode_Simulation | grep Users"
    cid=ipcBeginProcess(lmcmd)
    ipcReadProcess(cid)

    and it works fine...

    kind regards, have a nice weekend

    Stefan

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    The quotes are messing the command up. Try using single quotes instead. Probably wise using ipcWait() instead of ipcWaitForProcess(), so you know it has finished, rather than ready to communicate:

     procedure(Lmstat_out()

        lmstat_com_1 = strcat( "$CDSHOME/tools/bin/lmstat -c 5280@myhost -f Virtuoso_Multi_mode_Simulation | grep 'Users of Virtuoso_Multi_mode_Simulation:'" )
        cid=ipcBeginProcess( lmstat_com_1 )
        ipcWait(cid)
        ipcReadProcess(cid)
    )

    This seems to work...

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tyanata
    tyanata over 14 years ago

     Thanks a lot to both of you.

    In fact and both proposed solutions solved my problem.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JPBharti
    JPBharti over 8 years ago

    Hi Andrew,

    I have a similar requirement as mentioned by tyanata. The only difference is that I want to store the output of lmstat command in a file for further processing. Following is the code snippet that I wrote :

    wa_path=geGetShellEnvVar("workarea")     ; Variable workarea is defined in .cshrc to my workarea path
    cmdStr=strcat("lmstat -s | tee " wa_path "/licenseLog.txt")
    cid=ipcBeginProcess(cmdStr)
    ipcWait(cid)

    Once, I execute these lines, I get an empty file "licenseLog.txt" in my workarea. If I execute the "lmstat -s | tee licenseLog.txt" in terminal, it works like a breeze. I tried implementing this with the redirection operator as well but no luck. The same command in terminal works!

    cmdStr=strcat("lmstat -s > " wa_path "/licenseLog.txt")

    Can you please tell me what could be the potential issue with the script. Is it with the use of IPC commands?

    Regards,
    Jay

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Jay,

    This isn't really related to the original post - you don't have any quotes in your command, so that wouldn't be it. I'm assuming you don't have any strange characters or spaces in your directory path (i.e. whatever the $workarea env var contains)? Yes, the original post was doing an ipcBeginProcess of an lmstat command, but the issue wasn't anything to do with that part at all.

    Note that your code works for me (although my "lmstat -s was returning an error because I didn't have $LM_LICENSE_FILE set); I did have to change the geGetShellEnvVar to be getShellEnvVar because geGetShellEnvVar is the wrong function name (it would just fail, so I'm assuming it's nothing as obvious as that).

    Personally I'd have used the redirect rather than a tee. Since you're not reading the output of the IPC command (using ipcReadProcess), you're generating a buffer of data that might just be holding something up - not sure which IC subversion you're using. It's better to just redirect to a file rather than keeping the output as normal (which is what the tee does). You can see this that if you change the "lmstat -s" to an "lmstat -a" then you can do repeated ipcReadProcess(cid) calls and keep getting chunks of data - it's possible that buffer might fill up causing the command to block. I'm not sure that's really your issue here though.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JPBharti
    JPBharti over 8 years ago

    Andrew,

    Thanks for the quick reply. I am using ICAVD12.2-64b.78 and sorry for the typo for function getShellEnvVar.

    It's strange to notice that the implementation using "tee" as well as "redirection operator" is working for you. Although I will be using "lmstat -a" for few of my requirements, I think it would not be a good idea to implement it using ipcReadProcess(cid) calls as the data buffer generated from this will be quite large, that's why I wanted to dump the output to a file.

    I tried implementing this by calling a perl script through IPC. Perl script consists of a "system" function which executes the same 'tee' or the 'redirect' operator. Still it is not working.

    Regards,
    Jay Bharti

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Jay,

    My point about using tee is that you're then producing a load of standard output which you're not consuming, potentially filling up the input buffer back to virtuoso. So I wouldn't do that if you just want a file. You could use

    cid=ipcBatchProcess("lmstat -s" "" "./licenseLog.txt")
    ipcWait(cid)

    Given that this is failing for perl too, I wonder whether the executable is failing with an error - perhaps your command could be:

    my $serverStatusCmd="lmstat -s > ".$pwd."/licenseLog.txt"." 2>&1"

    This would redirect any stderr to the file too - might give a clue as to why it's failing. Either way, doesn't sound like it's a Cadence issue - since you're using a non-Cadence executable (lmstat is from Flexera) and you're invoking it from perl...

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JPBharti
    JPBharti over 8 years ago

    Hi Andrew,

    I tried with the command ipcBatchProcess.


    cid=ipcBatchProcess("lmstat -a" "" "licenseLog.txt")
    ipcWait(cid)

    Now, I get one line error message stored in the file as :

    sh : <path_to_installation_dir>/icadv/12.2/tools/bin/lmstat: /lib/ld-lsb.so.3: bad ELF interpreter : No such file or directory

    Is this something related to OS configurations?

    Regards,
    Jay Bharti

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information